Keydown事件发生两次
在Windows商店App上,我有这个简单的TextBox
<TextBox Name="TextBoxUser" HorizontalAlignment="Right" Width="147" Margin="20,0,0,0" KeyDown="TextBox_KeyDown" /
这有一个与之关联的KeyDown事件。
private async void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key == Windows.System.VirtualKey.Enter) { Debug.WriteLine("LA"); } }
这个函数的输出是:
LA
LA
虽然我只输入一次,但它会打印2次。 任何原因或我做错了什么?
这应该只触发一次事件,所以如果它发射两次,我会检查一些事情。
检查您是否正在处理父控件上的按键事件。 这可以是面板或包含窗口。 事件将通过可视树向下冒泡。 例如,文本框上的键也将是包含文本框的窗口上的keydown。
要阻止这种情况发生,您可以将事件标记为如下处理;
e.Handled = true;
要检查的另一件事是您没有订阅该事件两次。 XAML也会这样做;
TextBoxUser.KeyDown + = TextBox_KeyDown
所以检查你的代码后面没有这个。
您可以检查发件人和e.OriginalSource属性,以查看触发事件的位置。
这是Windows RT中的已知错误。您可以通过检查Key RepeatCount来处理它
if (e.KeyStatus.RepeatCount == 1) { //Execute code }
我终于意识到KeyDown事件中可能存在一个错误 。
当我设置时,正如@daniellepelley所说,
e.Handled = true;
事件仍然传播:其他按钮将拦截它,如果它们不应该。
在我的代码中,我刚用KeyUp事件替换了KeyDown事件,一切正常(始终将Handled设置为True值)!