检测按键组合Ctrl + =(Ctrl + Key.OemPlus)

时间:2019-10-15 08:34:02

标签: wpf keydown ctrl

我有一个RichTextBox控件,我需要处理 CTRL + = 按键组合。 = 符号本身是Key.OemPlus。因此问题在于,当我按下此组合键时,不会引发KeyDown事件。

我尝试了不同的代码变体,两个按下的键都使用Keyboard.IsKeyDown CTRL 键上使用Keyboard.Modifiers,等等...

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
}

因此,以上代码尝试均无效,而且我在Google中找不到答案。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

经典WPF路由事件问题。 KeyDown在内部由RichTextBox handled路由事件。它认为 Ctrl + = 是它可以识别的命令,因此它在到达您之前先吞噬KeyDown事件。幸运的是,有一个解决方案:PreviewKeyDown。如果将代码更改为处理PreviewKeyDown而不是KeyDown,则应该发现事件会按预期触发。