1

我有一个简单的 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仅每秒钟注册一次。发生了什么?

4

1 回答 1

2

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

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

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

这解决了你的问题。

于 2013-11-08T13:13:06.457 回答