【发布时间】:2019-06-19 16:40:39
【问题描述】:
我正在设置一个在单个页面上工作的全局键盘快捷键,例如 Ctrl + someKey 来做某事,Ctrl + Alt + otherKey 来激活其他一些事情等等。我或多或少有Ctrl + VirtualKey(字母、数字……)的工作代码,但我还需要一些不在VirtualKey 中的键,例如点、逗号、加号、减号……
这些是注册的事件:
public Planner()
{
this.InitializeComponent();
CoreWindow.GetForCurrentThread().KeyDown += CoreWindow_KeyDown;
CoreWindow.GetForCurrentThread().CharacterReceived += Planner_CharacterReceived;
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;
}
我将KeyDown 用于Ctrl + K、Ctrl + Shift + A 之类的快捷方式。
CharacterReceived 用于捕获逗号、点、加号、减号等字符,但它们不适用于 Ctrl 和 Alt。
最后,Dispatcher_AcceleratorKey 检查是否按下了 Alt 键。
【问题讨论】:
-
有意从 VirtualKey 枚举中省略了这些键。它们是 OEM 键,键盘制造商可以将它们放在他们喜欢的任何地方。或者完全省略它们。世界上某个地方的用户必须首先按下特殊键才能获得角色的情况并不少见。这使他们在面向整个世界的框架中选择快捷键很糟糕。你仍然可以使用 CharacterReceived,你need this。
-
正如我上面所指出的,我正在使用 CharacterReceived 来捕获逗号、点、加号、减号键,但与 Ctrl 或 Alt 结合使用时,它们不会触发事件。就像任何特殊键(Ctrl、Alt 或 shift)阻止触发发生一样。可能是因为字符结果不是 CharaterReceived。
标签: c# uwp keyboard-shortcuts keyevent