如何在Windows Store / Modern UI App中的keydown事件上处理修饰键?

时间:2013-11-08 12:06:44

标签: c# event-handling windows-runtime windows-store-apps keydown

我有一个简单的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 += ".";
    }
}

控制台仅在TextBlock控件

之上RichEditBox

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

^^^^^^^^^^

然而,我得到的是这个

.^.^.^.^.^

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

1 个答案:

答案 0 :(得分:2)

请注意具有[Flags]属性的枚举类型,枚举类型的值可以打开多个标志。当然在这种情况下,您还可以为修改键启用Locked标志。由于Ctrl键实际上不是锁定键,因此它仍然是由Windows合成的。

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

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

这解决了您的问题。