wpf
Ottimizzazione per l'interazione tattile
Ricerca…
Mostra tastiera touch su Windows 8 e Windows 10
App WPF che utilizzano .NET Framework 4.6.2 e versioni successive
Con le app WPF che utilizzano .NET Framework 4.6.2 (e versioni successive), la tastiera virtuale viene automaticamente richiamata e ignorata senza ulteriori passaggi richiesti.
App WPF indirizzate a .NET Framework 4.6.1 e versioni precedenti
WPF non è principalmente abilitato al tocco, il che significa che quando l'utente interagisce con un'applicazione WPF su desktop, l'app non visualizzerà automaticamente la tastiera touch quando i controlli TextBox
ricevono lo stato attivo. Questo è un comportamento scomodo per gli utenti di tablet, costringendoli ad aprire manualmente la tastiera touch tramite la barra delle applicazioni di sistema.
Soluzione
La tastiera touch è in realtà una classica applicazione exe
che può essere trovata su ciascun PC Windows 8 e Windows 10 nel seguente percorso: C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe
.
Sulla base di questa conoscenza, è possibile creare un controllo personalizzato derivato da TextBox
, che ascolta l'evento GotTouchCapture
(questo evento viene chiamato quando il controllo ottiene il focus tramite touch) e avvia il processo della tastiera tattile .
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 );
}
}
Puoi migliorarlo ulteriormente inserendo nella cache il processo creato e quindi uccidendolo dopo che il controllo perde l'attenzione:
//added field
private Process _touchKeyboardProcess = null;
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );
Ora puoi collegare l'evento 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;
}
}
Nota sulla modalità Tablet in Windows 10
Windows 10 ha introdotto una modalità tablet che semplifica l'interazione con il sistema quando si utilizza il PC in modo touch-first. Questa modalità, oltre ad altri miglioramenti, garantisce che la tastiera tattile venga visualizzata automaticamente anche per le app desktop classiche, incluse le app WPF.
Windows 10 Approccio alle impostazioni
Oltre alla modalità tablet, Windows 10 può visualizzare automaticamente la tastiera touch per le app classiche anche al di fuori della modalità tablet. Questo comportamento, disabilitato per impostazione predefinita, può essere abilitato nell'app Impostazioni.
Nell'app Impostazioni , vai alla categoria Dispositivi e seleziona Digitazione . Se scorri fino in fondo, puoi trovare il pannello "Mostra la tastiera touch o il pannello per la scrittura a mano quando non ci si trova in modalità tablet e non è presente alcuna tastiera", che è possibile abilitare.
Vale la pena ricordare che questa impostazione è visibile solo su dispositivi con funzionalità touch.