我已经尝试了什么?
Window.Current.CoreWindow.KeyDown += keydown;
private void keydown(CoreWindow sender, KeyEventArgs args)
{
//Printing entered key
}
我正在开发UWP应用。在我的应用中windows。current。corewindow为键盘上的所有键触发keydown事件,但"tab"除外。关键。
我不知道为什么事件不触发特定的键?我想在"Tab"时做一些动作按下键。有谁知道,如何在触发事件时">
通过测试,有时按Tab键不会触发CoreWindow.KeyDown
事件处理程序时,有一些控件,如Button
可以得到焦点在一个页面。您可以尝试添加一个UIElement。KeyDown事件或一个元素。PreviewKeyDown事件到xaml文件中的页面(如MainPage
)
更新:
当你使用CoreWindow.KeyDown
事件并且有控件可以在你的页面中获得焦点时,按Tab键将让焦点步进选项卡序列,而不是触发CoreWindow.KeyDown
事件。当选项卡触发CoreWindow.KeyDown
事件时
如果你想在Tab时触发CoreWindow.KeyDown
事件键按下后,您可以将页面中的TabNavigation
设置为Once
。如果你想保存选项卡键的功能,步进制表符序列,我们仍然建议您使用UIElement.KeyDown
事件或UIElement.PreviewKeyDown
事件。例如:Window.Current.Content.KeyDown += Content_KeyDown;
更新:
Window.Current.Content.KeyDown
事件为路由事件。关于路由事件,您可以参考文档。路由事件是可能从子对象传递(路由)到对象树中每个后续父对象的事件。
在你的场景中,你可以监控e.OriginalSource
的值,当你进入最后一个控件时,你可以通过按Tab获得焦点。键,KeyDown
事件将被触发两次。在第二个触发器中,e.OriginalSource
的值可以是Windows.UI.Xaml.Controls.Frame
(可能不同,取决于您在第二个触发器中的观察结果)。这是因为路由的KeyDown
事件此时需要冒泡到它的父对象。您可以添加一些代码来标识第二个触发器。
例如:
private void Content_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.OriginalSource.ToString()!= "Windows.UI.Xaml.Controls.Frame")
{
//Just be fired once here
}
}
注意,您可以尝试使用代码e.Handled = true;
来停止此处引用的路由行为。并且,如果您使用Page.KeyDown
事件,则不会触发两次KeyDown事件。