检测按键组合 Ctrl+= (Ctrl+Key.OemPlus)
Detecting of keydown combination Ctrl+= (Ctrl+Key.OemPlus)
我有一个 RichTextBox
控件,我需要处理 CTRL + = 组合键。 = 标志本身就是Key.OemPlus
。所以问题是当我按下这个组合时, KeyDown
事件没有被引发。
我尝试了不同的代码变体,Keyboard.IsKeyDown
用于两个按下的键,Keyboard.Modifiers
用于 CTRL 键,等等...
if (Keyboard.IsKeyDown(Key.OemPlus) && Keyboard.IsKeyDown(Key.LeftCtrl))
{
// do smth
}
if (Keyboard.IsKeyDown(Key.OemPlus) && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
// do smth
}
if (args.Key == Key.OemPlus && Keyboard.IsKeyDown(Key.LeftCtrl))
{
// do smth
}
if (args.Key == Key.OemPlus && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
// do smth
}
因此,上述代码尝试中的 none 成功了,但我无法在 Google 中找到答案。如何解决这个问题?
经典 WPF 路由事件问题。 KeyDown
路由事件在内部被 RichTextBox
handled。它认为 Ctrl + = 是它识别的命令,所以它在到达你之前吃掉 KeyDown
事件。幸运的是有一个解决方案:PreviewKeyDown
。如果您将代码更改为处理 PreviewKeyDown
而不是 KeyDown
,您应该会发现事件会按预期触发。
我有一个 RichTextBox
控件,我需要处理 CTRL + = 组合键。 = 标志本身就是Key.OemPlus
。所以问题是当我按下这个组合时, KeyDown
事件没有被引发。
我尝试了不同的代码变体,Keyboard.IsKeyDown
用于两个按下的键,Keyboard.Modifiers
用于 CTRL 键,等等...
if (Keyboard.IsKeyDown(Key.OemPlus) && Keyboard.IsKeyDown(Key.LeftCtrl))
{
// do smth
}
if (Keyboard.IsKeyDown(Key.OemPlus) && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
// do smth
}
if (args.Key == Key.OemPlus && Keyboard.IsKeyDown(Key.LeftCtrl))
{
// do smth
}
if (args.Key == Key.OemPlus && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
// do smth
}
因此,上述代码尝试中的 none 成功了,但我无法在 Google 中找到答案。如何解决这个问题?
经典 WPF 路由事件问题。 KeyDown
路由事件在内部被 RichTextBox
handled。它认为 Ctrl + = 是它识别的命令,所以它在到达你之前吃掉 KeyDown
事件。幸运的是有一个解决方案:PreviewKeyDown
。如果您将代码更改为处理 PreviewKeyDown
而不是 KeyDown
,您应该会发现事件会按预期触发。