在 Windows 8 和 Windows 10 上顯示觸控鍵盤

針對 .NET Framework 4.6.2 及更高版本的 WPF 應用程式

使用面向 .NET Framework 4.6.2(及更高版本)的 WPF 應用程式,軟鍵盤會自動呼叫和解除,無需任何其他步驟。

https://i.stack.imgur.com/m8jUb.gif

針對 .NET Framework 4.6.1 及更早版本的 WPF 應用程式

WPF 主要不是觸控啟用,這意味著當使用者與桌面上的 WPF 應用程式互動時,當 TextBox 控制元件獲得焦點時,應用程式將不會自動顯示觸控鍵盤。這對於平板電腦使用者來說是一種不方便的行為,迫使他們通過系統工作列手動開啟觸控鍵盤。

https://i.stack.imgur.com/nFKN1.jpg

解決方法

觸控鍵盤實際上是一個經典的 exe 應用程式,可以在以下路徑上的每臺 Windows 8 和 Windows 10 PC 上找到:C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe

基於這些知識,你可以建立一個自定義控制元件,該控制元件派生自 TextBox,它監聽 GotTouchCapture 事件(當控制元件通過觸控獲得焦點時呼叫此事件)並啟動觸控鍵盤的過程

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 );
    }
}

你可以通過快取建立的程序進一步改進,然後在控制元件失去焦點後將其終止:

//added field
private Process _touchKeyboardProcess = null;
 
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );

現在你可以連線 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;
   }
}

請注意 Windows 10 中的 Tablet 模式

Windows 10 引入了平板電腦模式,在以觸控優先方式使用 PC 時簡化了與系統的互動。除了其他改進之外,此模式還可確保即使是經典桌面應用程式(包括 WPF 應用程式)也能自動顯示觸控鍵盤

Windows 10 設定方法

除平板電腦模式外,Windows 10 還可以在平板電腦模式之外自動顯示經典應用的觸控鍵盤。預設情況下禁用的此行為可以在設定應用中啟用。

在“ 設定” 應用中,轉到“ 裝置” 類別,然後選擇“ 鍵入” 。如果你完全向下滾動,則可以找到不在平板電腦模式下顯示觸控鍵盤或手寫面板且沒有連線鍵盤設定,你可以啟用該設定。

StackOverflow 文件

值得一提的是,此設定僅在具有觸控功能的裝置上可見。