我正在编写一个Metro应用程序,只要用户开始输入,就可以将焦点转移到单个文本框。但我无法弄清楚如何在本地实现此功能,而无需修改其他用户控件来检测keydown和前向焦点到文本框。
在WinForms中,我会使用表单的“KeyPreview”属性,这会导致表单控件中的任何键按下以激活KeyDown / KeyPress / KeyUp事件。我在地铁里找不到任何等价物。
我尝试了只是强制将焦点放在文本框中的天真解决方案,但是这有明显的问题(例如按钮闪烁而不是在点击并按住它们时保持突出显示)。
如何确保键盘输入到特定文本框?
答案 0 :(得分:2)
事件需要放在当前核心窗口上,这是所有控件嵌套在其上的根元素。
Windows.UI.Xaml.Window.Current.CoreWindow.KeyDown += (sender, arg) => {
// invoked anytime a key is pressed down, independent of focus
}
答案 1 :(得分:1)
你去......
Responding to keyboard input (Metro style apps using C#/VB/C++ and XAML)
&安培;&安培;
Implementing keyboard accessibility (Metro style apps using C#/VB/C++ and XAML)
特别注意路由事件。也有例子。
希望这有帮助。
答案 2 :(得分:1)
在你的xaml代码中,你将这些事件绑定到page ::
Loaded="pageRoot_Loaded_1"
Unloaded="pageRoot_Unloaded_1"
在这些方法中,你必须绑定和取消绑定keydown或keypress的事件
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
}
private void pageRoot_Unloaded_1(object sender, RoutedEventArgs e)
{
Window.Current.CoreWindow.KeyDown -= CoreWindow_KeyDown;
}