Ric*_*Ric 6 c# xaml windows-runtime windows-store-apps
在Windows商店App上,我有这个简单的TextBox
<TextBox Name="TextBoxUser" HorizontalAlignment="Right" Width="147" Margin="20,0,0,0" KeyDown="TextBox_KeyDown" /
Run Code Online (Sandbox Code Playgroud)
这有一个与之关联的KeyDown事件.
private async void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Enter)
{
Debug.WriteLine("LA");
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数的输出是:
LA
LA
虽然我只按一下Enter键,但它会打印2次.任何原因或我做错了什么?
小智 12
这应该只触发一次事件,所以如果它发射两次,我会检查一些事情.
检查您是否正在处理父控件上的按键事件.这可以是面板或包含窗口.事件将通过可视树向下冒泡.例如,文本框上的键也将是包含文本框的窗口上的keydown.
要阻止这种情况发生,您可以将事件标记为如下处理;
e.Handled = true;
Run Code Online (Sandbox Code Playgroud)
要检查的另一件事是您没有订阅该事件两次.XAML将做同样的事情;
TextBoxUser.KeyDown + = TextBox_KeyDown
所以检查你的代码后面没有这个.
您可以检查sender和e.OriginalSource属性以查看事件的触发位置.
这是Windows RT中的已知错误.您可以通过检查Key RepeatCount来处理它
if (e.KeyStatus.RepeatCount == 1)
{
//Execute code
}
Run Code Online (Sandbox Code Playgroud)