如何处理 Windows 应用商店/新式 UI 应用中键向下事件上的修饰键



我有一个简单的Windows应用商店/现代UI应用程序,它有一个RichEditBox。我正在尝试处理CTRL+B / CTRL+I等以打开和关闭粗体/斜体文本,但我遇到了一些奇怪的行为。这是我的代码:

private void RichEditBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
    var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control);
    if (state == CoreVirtualKeyStates.Down)
    {
        console.Text += "^";
    }
    else
    {
        console.Text += ".";
    }
}

控制台只是RichEditBox控件上方的一个TextBlock

如果我按CTRL十次,我希望输出是

^^^^^^^^^^

但是,我得到的是这个

.^.^.^.^.^

CTRL仅每秒注册一次。发生了什么事情?

当心具有 [Flags] 属性的枚举类型,枚举类型的值可以打开多个标志。 当然,在这里的情况,您还将为修改键打开锁定标志。 古怪的是,由于 Ctrl 键实际上并不是锁定键,但它仍然由 Windows 合成。

对于具有 [Flags] 的枚举类型,您需要隔离您感兴趣的标志,如下所示:

    if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down) {
        console.Text += "^";
    }

这可以解决您的问题。

最新更新