読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでEnterキーを押したときに何らかの処理をおこないたい

Windows Phone

ソフトウェアキーボードのEnterキーをタップしたときに、何らかの処理を行いたいことは多々あるのではないでしょうか。

例えば、検索画面の場合だとEnterキーで検索や、入力項目の多い画面では次のコントロールへフォーカスを移動させるのは要望としては定番です。今回はそのトリガーとなるソフトウェアキーボードのEnterキーが押されたイベント拾い方についてご紹介します。

ページのXAMLにTextBoxコントロールを配置していたとします。このTextBoxコントロールにKeyDownイベントハンドラを定義します。

<TextBox x:Name="textBx" KeyDown="textWord_KeyDown" 
         InputScope="Search"/>

コードビハインドでcs側にKeyDownイベントハンドラを書きます。e.Keyにはどのキーが入力されたかが含まれています。この値がKey.Enterの場合に、なんらかの処理をさせるようにします。

private void textBox_KeyDown(object sender, 
                System.Windows.Input.KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter)) {
        // ここでなんらかの処理
    }
}

InputScopeを「Search」にしている理由

余談ですが、ソフトウェアキーボードの種類をXAMLにて変更することが可能です。デフォルトのソフトウェアキーボードの場合、右下のキーがEnterキー相当になっています。

f:id:ch3cooh393:20141015161833p:plain

InputScopeを「Search」にしている場合、右下のEnterキーが「検索キー」に変わります。本記事のようにEnterキーが入力されるとなんらかの処理を実行させる場合には、デフォルトのソフトウェアキーボードではなく、「なんらかの処理」に合わせたInputScopeを使用したほうが良いでしょう。

f:id:ch3cooh393:20141015161815p:plain

エンターキーでソフトウェア・キーボードを閉じる

private void textBox_KeyDown(object sender, 
                System.Windows.Input.KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter)) 
    {
            // 別のコントロールのFocusメソッドを呼ぶことで
            // ソフトウェア・キーボードを非表示にする
            this.Focus();
    }
}