サーチ…
Windows 8とWindows 10のタッチキーボードを表示
.NET Framework 4.6.2以降を対象とするWPFアプリケーション
.NET Framework 4.6.2(およびそれ以降)を対象とするWPFアプリケーションでは、追加の手順を実行することなく、ソフトキーボードが自動的に起動および終了されます。
.NET Framework 4.6.1以前をターゲットとするWPFアプリケーション
WPFは主にタッチ対応ではありません。つまり、ユーザーがデスクトップ上のWPFアプリケーションとやりとりしたときに、 TextBox
コントロールがフォーカスを受け取ったときにタッチキーボードが自動的に表示されません 。これは、タブレットユーザーがシステムのタスクバーを介して手動でタッチキーボードを開くようにするための不便な動作です。
回避策
タッチキーボードは実際には、各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は、タブレットモードの外でもクラシックアプリ用のタッチキーボードを自動的に表示することができます。この動作は、デフォルトで無効になっており、設定アプリで有効にすることができます。
設定アプリで[ デバイス]カテゴリに移動し、[ 入力]を選択します。下方向にスクロールすると、「タブレットモードではないときにタッチキーボードまたは手書きパネルを表示し、キーボードに接続されていない」設定が表示されます。
この設定は、タッチ機能を備えたデバイスでのみ表示されます。