【问题标题】:Detecting of keydown combination Ctrl+= (Ctrl+Key.OemPlus)检测 keydown 组合 Ctrl+= (Ctrl+Key.OemPlus)
【发布时间】:2019-10-15 08:34:02
【问题描述】:

我有一个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
}

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

【问题讨论】:

  • 按键的顺序必须是: 1. Ctrl; 2.= (Key.OemPlus)
  • 如何检测按键事件?
  • 您使用的是 KeyDown 还是 PreviewKeyDown 事件?
  • 我正在使用 KeyDown 事件

标签: wpf keydown ctrl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2011-11-13
    • 2011-02-23
    • 1970-01-01
    • 2016-06-26
    • 2020-08-13
    • 2013-08-21
    相关资源
    最近更新 更多