WinRT Metro中“KeyPreview”属性的等价物

时间:2012-07-18 21:49:19

标签: c# .net keyboard microsoft-metro windows-runtime

我正在编写一个Metro应用程序,只要用户开始输入,就可以将焦点转移到单个文本框。但我无法弄清楚如何在本地实现此功能,而无需修改其他用户控件来检测keydown和前向焦点到文本框。

在WinForms中,我会使用表单的“KeyPreview”属性,这会导致表单控件中的任何键按下以激活KeyDown / KeyPress / KeyUp事件。我在地铁里找不到任何等价物。

我尝试了只是强制将焦点放在文本框中的天真解决方案,但是这有明显的问题(例如按钮闪烁而不是在点击并按住它们时保持突出显示)。

如何确保键盘输入到特定文本框?

3 个答案:

答案 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;
    }