UWP KeyRoutedEventArgs.handle 不会取消退格键



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

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

这样的功能存在吗?

如果您有一个定义如下的文本框:

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

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

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

但正如你提到的,如果你检查后退键并设置 Handle = true,它不起作用:用户仍然可以使用退格键。所以这是行不通的。

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

如果调试代码,您可以看到执行事件处理程序时字符已经消失。您必须使用其他事件来解决此问题。这里有一个选项:

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;
    }

相关内容

  • 没有找到相关文章

最新更新