我有一个简单的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 += "^";
}
这可以解决您的问题。