UWP KeyRoutedEventArgs.handled不取消退格键

时间:2017-11-15 23:51:48

标签: c# events uwp event-handling

有没有办法在UWP中用KeyDownEvent取消退格键?此事件使用KeyRoutedEventArgs,因此没有SuppressKeyPress功能。

event.Handled = true没有帮助;它只会阻止事件从同一个按键快速连续多次调用。

这样的功能是否存在?

1 个答案:

答案 0 :(得分:4)

如果你有一个像这样定义的TextBox:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBox KeyDown="TextBox_KeyDown"/>
</Grid>

如果您每次都设置Handled = true,则在KeyDown事件中,用户无法输入任何内容:

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        e.Handled = true;
    }

但正如您所提到的,如果您检查Back-key并设置Handled = true,则它不起作用:用户仍然可以使用退格键。所以这不起作用。

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Back)
        {
            e.Handled = true;
            return;
        }
    }

如果您调试代码,您可以看到执行eventhandler时字符已经消失。你必须使用其他事件解决这个问题。这是一个选项:

XAML:

    <TextBox KeyDown="TextBox_KeyDown" KeyUp="TextBox_KeyUp"/>

代码背后:

    private string currentText;
    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Back)
        {
            if (string.IsNullOrWhiteSpace(currentText))
                return;

            ((TextBox)sender).Text = currentText;
            ((TextBox)sender).SelectionStart = currentText.Length;
            ((TextBox)sender).SelectionLength = 0;
        }
    }

    private void TextBox_KeyUp(object sender, KeyRoutedEventArgs e)
    {
        currentText = ((TextBox)sender).Text;
    }