检测按键组合 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,您应该会发现事件会按预期触发。