2

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

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

我尝试了一种简单的解决方案,即在文本框离开时强制将焦点集中在文本框上,但这有明显的问题(例如,当您单击并按住它们时,按钮会闪烁而不是保持突出显示)。

如何确保任何键盘输入都转到特定的文本框?

4

3 回答 3

2

该事件需要放置在当前核心窗口上,这是所有控件嵌套的根元素。

Windows.UI.Xaml.Window.Current.CoreWindow.KeyDown += (sender, arg) => {
    // invoked anytime a key is pressed down, independent of focus
}
于 2012-10-20T14:00:06.473 回答
1

干得好 ...

响应键盘输入(使用 C#/VB/C++ 和 XAML 的 Metro 风格应用程序)

&&

实现键盘辅助功能(使用 C#/VB/C++ 和 XAML 的 Metro 风格应用程序)

特别注意路由事件。那里也有例子。

希望这可以帮助。

于 2012-07-19T00:36:12.243 回答
1

在您的 xaml 代码中,您将这些事件绑定到页面::

    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;
    }
于 2012-12-13T06:39:42.213 回答