wpf
Optymalizacja pod kątem interakcji dotykowych
Szukaj…
Wyświetlanie klawiatury dotykowej w systemie Windows 8 i Windows 10
Aplikacje WPF ukierunkowane na .NET Framework 4.6.2 i nowsze wersje
W aplikacjach WPF ukierunkowanych na .NET Framework 4.6.2 (i nowsze wersje) klawiatura programowa jest automatycznie wywoływana i zwalniana bez żadnych dodatkowych kroków.
Aplikacje WPF ukierunkowane na .NET Framework 4.6.1 i wcześniejsze
WPF nie obsługuje przede wszystkim obsługi dotykowej, co oznacza, że gdy użytkownik wchodzi w interakcję z aplikacją WPF na komputerze, aplikacja nie będzie automatycznie wyświetlać klawiatury dotykowej, gdy elementy sterujące TextBox
zostaną zogniskowane. Jest to niewygodne zachowanie dla użytkowników tabletów, zmuszające ich do ręcznego otwierania klawiatury dotykowej za pomocą paska zadań systemu.
Obejście
Klawiatura dotykowa jest w rzeczywistości klasyczną aplikacją exe
, którą można znaleźć na każdym komputerze z systemem Windows 8 i Windows 10 na następującej ścieżce: C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe
.
W oparciu o tę wiedzę możesz utworzyć niestandardowy formant pochodzący z TextBox
, który nasłuchuje zdarzenia GotTouchCapture
(to zdarzenie jest wywoływane, gdy formant zostanie zogniskowany za pomocą dotyku) i rozpocznie proces klawiatury dotykowej .
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 );
}
}
Możesz to jeszcze bardziej ulepszyć, buforując utworzony proces, a następnie zabijając go po utracie kontroli przez kontrolę:
//added field
private Process _touchKeyboardProcess = null;
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );
Teraz możesz LostFocus
zdarzenie LostFocus
:
//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;
}
}
Uwaga na temat trybu tabletu w systemie Windows 10
W systemie Windows 10 wprowadzono tryb tabletu , który upraszcza interakcję z systemem podczas korzystania z komputera PC metodą pierwszego dotknięcia. Ten tryb, oprócz innych ulepszeń, zapewnia automatyczne wyświetlanie klawiatury dotykowej nawet w klasycznych aplikacjach komputerowych, w tym aplikacjach WPF.
Podejście do ustawień systemu Windows 10
Oprócz trybu tabletu system Windows 10 może automatycznie wyświetlać klawiaturę dotykową w klasycznych aplikacjach nawet poza trybem tabletu. To zachowanie, które jest domyślnie wyłączone, można włączyć w aplikacji Ustawienia.
W aplikacji Ustawienia przejdź do kategorii Urządzenia i wybierz Pisanie . Jeśli przewiniesz do końca, możesz znaleźć ustawienie „Pokaż klawiaturę dotykową lub panel pisma odręcznego, gdy nie jest w trybie tabletu i nie ma podłączonej klawiatury”, które możesz włączyć.
Warto wspomnieć, że to ustawienie jest widoczne tylko na urządzeniach z funkcjami dotykowymi.