Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP KeyRoutedEventArgs.handled不取消退格键_C#_Events_Uwp_Event Handling - Fatal编程技术网

C# UWP KeyRoutedEventArgs.handled不取消退格键

C# UWP KeyRoutedEventArgs.handled不取消退格键,c#,events,uwp,event-handling,C#,Events,Uwp,Event Handling,是否有办法在UWP中使用KeyDownEvent取消退格键?此事件使用KeyRoutedEventArgs,因此没有SuppressKeyPress功能 event.Handled=true没有帮助;它只会阻止事件从同一按键快速连续调用多次 这样的函数存在吗?如果您有这样定义的文本框: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBox KeyDown="Tex

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

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


这样的函数存在吗?

如果您有这样定义的文本框:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBox KeyDown="TextBox_KeyDown"/>
</Grid>
但正如您所提到的,如果您检查Back键并将Handled=true设置为true,则它不起作用:用户仍然可以使用backspace。所以这不起作用

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Back)
        {
            e.Handled = true;
            return;
        }
    }
如果调试代码,可以看到在执行eventhandler时该字符已经消失。您必须使用其他事件来解决此问题。这里有一个选择:

XAML:


如果您有这样定义的文本框:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBox KeyDown="TextBox_KeyDown"/>
</Grid>
但正如您所提到的,如果您检查Back键并将Handled=true设置为true,则它不起作用:用户仍然可以使用backspace。所以这不起作用

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Back)
        {
            e.Handled = true;
            return;
        }
    }
如果调试代码,可以看到在执行eventhandler时该字符已经消失。您必须使用其他事件来解决此问题。这里有一个选择:

XAML:


e、 Handled=true应该起作用,一定是其他原因导致了问题,请发布完整的代码以获得进一步的帮助。Handled=true应该起作用,一定是其他原因导致了问题,请发布完整的代码以获得进一步的帮助。谢谢但是,有没有办法保存光标位置?我尝试添加一个选择更改函数和一个新变量,类似于您设置
currentText
的方式,但它总是快速恢复。效果很好。谢谢但是,有没有办法保存光标位置?我尝试添加一个选择更改函数和一个新变量,类似于您设置
currentText
的方式,但它总是快速恢复。
    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;
    }