我有一个简单的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
仅每秒注册一次。发生了什么?
答案 0 :(得分:2)
请注意具有[Flags]属性的枚举类型,枚举类型的值可以打开多个标志。当然在这种情况下,您还可以为修改键启用Locked标志。由于Ctrl键实际上不是锁定键,因此它仍然是由Windows合成的。
对于具有[Flags]的枚举类型,您需要隔离您感兴趣的标志,如下所示:
if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down) {
console.Text += "^";
}
这解决了您的问题。