【问题标题】:KeyDown event and AltGrKeyDown 事件和 AltGr
【发布时间】:2016-09-16 13:59:30
【问题描述】:

如何检测 Alt Gr 按键?

我将KeyDown 事件附加到 WPF 窗口。

当我按下 Alt Gr 时,KeyEventArg 对象中的Key 参数等于LeftCtrl

当我检查Keyboard.IsKeyDownKeyboard.Modifiers 时,它总是返回Control 按键。

如何检测AltGr 按键?最好的方法是什么?

【问题讨论】:

  • 你有什么问题?
  • 如何检测AltGr 按键?
  • Alt Gr 只是 Alt + Ctrl,不能通过 KeyDown 检测为单个键。

标签: wpf keydown


【解决方案1】:

看起来这篇文章回答了你的问题:

How to distinguish between multiple key combination in wpf/c#

具体来说,这部分代码是你看到 AltGr 按键的方式:

private void WindowKeyDown(object sender, KeyEventArgs e)
{
    var alt = e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Alt);
    var ctrl = e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control);
    var altGr = alt & ctrl;
    var shift = e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Shift);
}

这是因为 Alt GR 被 windows 注册为“ALT + LEFT CTRL”

【讨论】:

  • 我知道 Alt GR 是上述的组合。结果:alt:假,ctrl:真,altGr:假。我不知道为什么在我的情况下没有触发alt
  • 您能检查一下 e.SystemKey 返回的内容吗? msdn.microsoft.com/en-us/library/…
  • 不返回任何内容。我找到了我的问题的解决方案。感谢您的回复。
【解决方案2】:

您是否已经尝试过:

void MainWindow_KeyDown(object sender, KeyEventArgs e) {
    if (e.Key == Key.RightAlt)
    {
        // Do something
    } }

如果没有,请定义您已经尝试过的内容。

【讨论】:

  • 我尝试了最典型的解决方案,例如:e.Key == Key.RightAlte.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Alt)Keyboard.IsKeyDown
【解决方案3】:

我找到了解决问题的方法。 AltGrMenu 组件处理。

我将我的KeyDown 事件更改为KeyUp,所以现在我可以正确捕获AltGr

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多