wpf
Optimaliseren voor touch-interactie
Zoeken…
Aanraaktoetsenbord weergeven op Windows 8 en Windows 10
WPF-apps die zijn gericht op .NET Framework 4.6.2 en hoger
Met WPF-apps die zijn gericht op .NET Framework 4.6.2 (en hoger), wordt het zachte toetsenbord automatisch aangeroepen en afgewezen zonder dat aanvullende stappen vereist zijn.
WPF-apps die zijn gericht op .NET Framework 4.6.1 en eerder
WPF is niet primair aanraakgevoelig, wat betekent dat wanneer de gebruiker een WPF-toepassing op het bureaublad gebruikt, de app het aanraaktoetsenbord niet automatisch weergeeft wanneer de besturingselementen van TextBox
focus krijgen. Dit is een onhandig gedrag voor gebruikers van tablets, waardoor ze het aanraaktoetsenbord handmatig moeten openen via de systeemtaakbalk.
tijdelijke oplossing
Het aanraaktoetsenbord is eigenlijk een klassieke exe
toepassing die op elke Windows 8- en Windows 10-pc op het volgende pad kan worden gevonden: C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe
.
Op basis van deze kennis kunt u een aangepast besturingselement maken dat is afgeleid van TextBox
, dat luistert naar de GotTouchCapture
gebeurtenis (deze gebeurtenis wordt opgeroepen wanneer het besturingselement focus krijgt door aanraking) en het proces van het aanraaktoetsenbord start .
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 );
}
}
Je kunt dit nog verder verbeteren door het gemaakte proces in het cachegeheugen op te slaan en het vervolgens te doden nadat de controle de focus verliest:
//added field
private Process _touchKeyboardProcess = null;
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );
Nu kunt u het LostFocus
evenement aansluiten:
//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;
}
}
Opmerking over de tabletmodus in Windows 10
Windows 10 heeft een tabletmodus geïntroduceerd die de interactie met het systeem vereenvoudigt wanneer de pc op de eerste manier wordt gebruikt. Deze modus zorgt er, afgezien van andere verbeteringen, voor dat het aanraaktoetsenbord automatisch wordt weergegeven, zelfs voor klassieke Desktop-apps inclusief WPF-apps.
Windows 10 instellingen aanpak
Naast de tabletmodus kan Windows 10 automatisch het aanraaktoetsenbord weergeven voor klassieke apps, zelfs buiten de tabletmodus. Dit gedrag, dat standaard is uitgeschakeld, kan worden ingeschakeld in de app Instellingen.
Ga in de app Instellingen naar de categorie Apparaten en selecteer Typen . Als u helemaal naar beneden scrolt, vindt u de instelling 'Het aanraaktoetsenbord of handschriftpaneel tonen als de tabletmodus niet is ingeschakeld en er geen toetsenbord is aangesloten', die u kunt inschakelen.
Het is vermeldenswaard dat deze instelling alleen zichtbaar is op apparaten met aanraakmogelijkheden.