wpf
Optimierung für die Touch-Interaktion
Suche…
Zeigen Sie die Touch-Tastatur unter Windows 8 und Windows 10 an
WPF-Apps für .NET Framework 4.6.2 und höher
Bei WPF-Apps, die auf .NET Framework 4.6.2 (und höher) abzielen, wird die Softtastatur automatisch aufgerufen und ohne zusätzliche Schritte verworfen.
WPF-Apps für .NET Framework 4.6.1 und früher
WPF ist nicht in erster Linie berührungsaktiviert. Wenn der Benutzer mit einer WPF-Anwendung auf dem Desktop interagiert, zeigt die App die Touch-Tastatur nicht automatisch an, wenn die TextBox
Steuerelemente den Fokus erhalten. Dies ist für Benutzer von Tablets ein unbequemes Verhalten, das sie dazu zwingt, die Touch-Tastatur manuell über die System-Taskleiste zu öffnen.
Problemumgehung
Die Touch-Tastatur ist eigentlich eine klassische exe
Anwendung, die auf jedem Windows 8- und Windows 10-PC unter dem folgenden Pfad zu finden ist: C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe
.
Basierend auf diesem Wissen können Sie ein benutzerdefiniertes Steuerelement TextBox
, das von TextBox
abgeleitet TextBox
, das das GotTouchCapture
Ereignis GotTouchCapture
(dieses Ereignis wird aufgerufen, wenn das Steuerelement durch Berührung den Fokus erhält) und den Prozess der Berührungstastatur startet .
public class TouchEnabledTextBox : TextBox
{
public TouchEnabledTextBox()
{
this.GotTouchCapture += TouchEnabledTextBox_GotTouchCapture;
}
private void TouchEnabledTextBox_GotTouchCapture(
object sender,
System.Windows.Input.TouchEventArgs e )
{
string touchKeyboardPath =
@"C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe";
Process.Start( touchKeyboardPath );
}
}
Sie können dies noch verbessern, indem Sie den erstellten Prozess zwischenspeichern und anschließend beenden, nachdem das Steuerelement den Fokus verliert:
//added field
private Process _touchKeyboardProcess = null;
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );
Jetzt können Sie das LostFocus
Ereignis verbinden:
//add this at the end of TouchEnabledTextBox's constructor
this.LostFocus += TouchEnabledTextBox_LostFocus;
//add this method as a member method of the class
private void TouchEnabledTextBox_LostFocus( object sender, RoutedEventArgs eventArgs ){
if ( _touchKeyboardProcess != null )
{
_touchKeyboardProcess.Kill();
//nullify the instance pointing to the now-invalid process
_touchKeyboardProcess = null;
}
}
Hinweis zum Tablet-Modus in Windows 10
Windows 10 hat einen Tablet-Modus eingeführt , der die Interaktion mit dem System vereinfacht, wenn der PC mit der Touch-first-Methode verwendet wird. Dieser Modus stellt neben anderen Verbesserungen sicher, dass die Touch-Tastatur auch für klassische Desktop-Apps einschließlich WPF-Apps automatisch angezeigt wird .
Ansatz für Windows 10-Einstellungen
Zusätzlich zum Tablet-Modus kann Windows 10 die Touch-Tastatur für klassische Apps auch außerhalb des Tablet-Modus automatisch anzeigen. Dieses Verhalten, das standardmäßig deaktiviert ist, kann in der App Einstellungen aktiviert werden.
Wechseln Sie in der App Einstellungen zu der Kategorie Geräte und wählen Sie Eingabe . Wenn Sie ganz nach unten scrollen, finden Sie die Einstellung "Touch-Tastatur oder Handschriftfeld anzeigen, wenn sich der Tablet-Modus nicht befindet und keine Tastatur angeschlossen ist", die Sie aktivieren können.
Es ist erwähnenswert, dass diese Einstellung nur auf Geräten mit Touch-Funktion sichtbar ist.