ストアアプリでTextBoxのAcceptReturnをTrueに設定するとEnterキーを押してもKeyDownイベントが発生しない対策

WindowsPhoneの国内発売まで毎日ブログ更新の1日目として、めとべや東京#7で話した内容その2について書きます。

 

ストアアプリでTextBoxのAcceptReturnをTrueに設定するとEnterキーを押してもKeyDownイベントが発生しなくなります。

ただTextBoxで改行したい、EnterキーのKeyDownイベントも取りたいというケースはあると思うのでその対策を。

 

まずTextBoxを配置します

<Page
    x:Class="App26.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App26"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBox x:Name="textBox" AcceptsReturn="True"/>
    </Grid>
</Page>

 

で、AddHandlerでKeyDownイベントをくっつけます。

この際3つ目の引数であるHandledEventsTooにTrueを渡してあげます。

        public MainPage()
        {
            this.InitializeComponent();
            this.textBox.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler(textBox_KeyDown), true);
        }

        void textBox_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            new Windows.UI.Popups.MessageDialog("Hello,world!").ShowAsync();
        }

 

以上です。簡単ですね