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.

Supporto per tastiera virtuale WPF con .NET Framework 4.6.2

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.

Tocca la tastiera in Windows

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.

Tocca l'impostazione della tastiera

Vale la pena ricordare che questa impostazione è visibile solo su dispositivi con funzionalità touch.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow