C # UWP KeyDown событие e.Handled странное поведение - PullRequest
0 голосов
/ 25 июня 2019

Я хочу включить только определенные ключи в элементе UWP TextBox.Но установка e.Handled = false не помогает.Все ключи приняты.

Аналогичное приложение в WPF работает.

Как решить эту проблему?

XAML:

 <Grid>
        <TextBox HorizontalAlignment="Left" Margin="251,166,0,0" VerticalAlignment="Top" KeyDown="TextKeyDown" Height="32" Width="579"/>
    </Grid> 

C #

private void TextKeyDown(object sender, KeyRoutedEventArgs e)
        {
            if (System.Text.RegularExpressions.Regex.IsMatch(e.Key.ToString(), "[0-9]"))
            {
                e.Handled = false;
                System.Diagnostics.Debug.WriteLine("number");
            }
            else e.Handled = true;


}

1 Ответ

1 голос
/ 25 июня 2019

Ввод в TextBox не происходит напрямую через события Key, и во многих случаях ввод текста вообще не включает в себя события клавиш (например, IME, автозаполнение, экранные клавиатуры, ввод рукописного ввода, распознавание речии т. д.)

События TextChanging и TextChanged будут запускаться независимо от происхождения текста и поэтому являются лучшим местом для реализации вашего фильтра.

В Windows Community Toolkit есть готовые расширения для фильтрации, которые могут подойти вам, а не вам самим.Проверьте TextBoxMask и TextBoxRegex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...