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值)!