がりらぼ

WindowsRuntimeの応援ブログ

AcceptReturnをTrueにしたTextBoxのOnKeydownイベントでEnterを取得する

TextBoxのAcceptReturnプロパティをTrueにするとなぜかKeyDownイベントでEnterキーのKeyDownは取得できません。(KeyUp時は取得できます)

TextBoxのAcceptsReturnをTrueにするとKeyDownでEnterが取得できない | 雪猫ノート

コントロール設計者側にも何かしらの意図があってこの設計にしたんでしょうが僕的にはKeydown時にもEnter取得したいので取得しちゃいましょう。

いろいろ考えた結果、TextBoxを継承するといい感じ。

public class MyTextBox:TextBox
{
    public event KeyEventHandler EnterDown;
    public MyTextBox()
    {
        this.AcceptsReturn = true;
    }

    protected override void OnKeyDown(KeyRoutedEventArgs e)
    {
        base.OnKeyDown(e);
        if (e.Key == VirtualKey.Enter)
        {
            EnterDown(this, e);  
        }
         
    }
}

あとはXAMLから呼び出して(要ビルド)
EnterDownイベントを取得します。

<local:MyTextBox Margin="583,334,490,279"  EnterDown="MyTextBox_EnterDown"/>

AcceptReturnとかOnにしてるときこそEnterのKeyDownとかほしいとおもうんですけどなんでなのかな