0

例如:uwp 枢轴自动处理 Ctrl+Tab。我想创建一个使用 Ctrl+Tab 的自定义应用程序范围的键盘快捷键。但是,如果我的应用程序当前专注于枢轴控件,那么枢轴会窃取快捷键按下事件。

我尝试过的:出于测试目的,我创建了一个处理 CoreWindow.KeyDown 事件的单例类。我注册了一些处理程序。当我按下 Ctrl+Tab 而不关注任何元素时,单例类将处理该事件。但是,如果我在我的应用程序中专注于枢轴控件并按 Ctrl+Tab,那么枢轴会窃取事件,而单例类则不会。如何使单例类获取事件而不是焦点元素?

4

1 回答 1

0

我试图KeyDownCoreWindow. 经测试,Pivot接收到键盘事件比事件更早CoreWindow.KeyDown,所以可以尝试禁用对应的键盘加速器Pivot

private void Pivot_ProcessKeyboardAccelerators(UIElement sender, ProcessKeyboardAcceleratorEventArgs args)
{
    if(args.Key==Windows.System.VirtualKey.Tab && args.Modifiers == Windows.System.VirtualKeyModifiers.Control)
    {
        args.Handled = true;
    }
}

通过监听Pivot.ProcessKeyboardAccelerators事件,我们可以防止触发Ctrl+时的默认行为( args.Handled = True)。Tab

不过需要注意的是,因为阻止了事件进一步冒泡,所以CoreWindow.KeyDown此时仍然不会触发事件。

您在问题描述中提到您使用单例来处理由快捷方式触发的事件。然后你需要在代码中的单例中直接调用你的处理方法。

...
args.Handled = true;
CtrlAndTabHandle();

谢谢。

于 2020-06-24T07:55:07.697 回答