サーチ…


Windows 8とWindows 10のタッチキーボードを表示

.NET Framework 4.6.2以降を対象とするWPFアプリケーション

.NET Framework 4.6.2(およびそれ以降)を対象とするWPFアプリケーションでは、追加の手順を実行することなく、ソフトキーボードが自動的に起動および終了されます。

.NET Framework 4.6.2でのWPFソフトキーボードのサポート

.NET Framework 4.6.1以前をターゲットとするWPFアプリケーション

WPFは主にタッチ対応ではありません。つまり、ユーザーがデスクトップ上のWPFアプリケーションとやりとりしたときに、 TextBoxコントロールがフォーカスを受け取ったときにタッチキーボードが自動的に表示されません 。これは、タブレットユーザーがシステムのタスクバーを介して手動でタッチキーボードを開くようにするための不便な動作です。

Windowsのタッチキーボード

回避策

タッチキーボードは実際には、各Windows 8およびWindows 10 PC上のC:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exeパスにある古典的なexeアプリケーションです。

この知識に基づいて、 GotTouchCaptureイベント(コントロールがタッチを使用してフォーカスを取得したときに呼び出されTextBox )をリッスンし、タッチキーボードのプロセス開始する TextBoxから派生したカスタムコントロールを作成できます。

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のタブレットモードに関する注意

Windows 10にはタブレットモードが導入されています 。タッチモードでPCを使用すると、システムとのやり取りが簡単になります。このモードでは、WPFアプリケーションを含む従来のデスクトップアプリケーションでも、 タッチキーボードが自動的に表示されるようになりました。

Windows 10の設定アプローチ

タブレットモードに加えて、Windows 10は、タブレットモードの外でもクラシックアプリ用のタッチキーボードを自動的に表示することができます。この動作は、デフォルトで無効になっており、設定アプリで有効にすることができます。

設定アプリで[ デバイス]カテゴリに移動し、[ 入力]を選択します。下方向にスクロールすると、「タブレットモードではないときにタッチキーボードまたは手書きパネルを表示し、キーボードに接続されていない」設定が表示されます。

タッチキーボード設定

この設定は、タッチ機能を備えたデバイスでのみ表示されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow