我有一个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中找不到答案。如何解决这个问题?
答案 0 :(得分:0)
经典WPF路由事件问题。 KeyDown
在内部由RichTextBox
handled路由事件。它认为 Ctrl + = 是它可以识别的命令,因此它在到达您之前先吞噬KeyDown
事件。幸运的是,有一个解决方案:PreviewKeyDown
。如果将代码更改为处理PreviewKeyDown
而不是KeyDown
,则应该发现事件会按预期触发。