1

我正在尝试将左 ALT 键与一个命令绑定,以切换 WPF 中菜单的可见性。但它不起作用..命令没有开火..

<Window.InputBindings>
        <KeyBinding
            Key="LeftAlt"
            Command="{Binding Path=MenuVisibilitySetCommand}"/>
</Window.InputBindings>

我注意到其他特殊键(例如 Alt、Ctrl 等)在这里也不起作用。

如何对 WPF 中的特殊键进行 KeyBinding?

4

2 回答 2

6

要让 LeftALt 像这样工作,您还需要将Modifiers属性设置为Alt.

<KeyBinding Key="LeftAlt" Modifiers="Alt" Command="{Binding Path=MenuVisibilitySetCommand}"/>
于 2012-06-18T12:22:30.337 回答
3

这些特殊键称为修饰键,这应该可以清楚地说明它为什么不起作用。修饰键是“修改”给定键的行为,就像 Shift + L 生成大写“L”,而只有 L 键生成小写“l”。将修饰键用于实际逻辑可能会产生问题且令人恼火,因为用户不习惯在按下此类按钮时看到发生的实际操作。但我同意在某些地方这是有意义的,例如在按下 ALT 键时突出显示 MenuItems。

但是对于您的实际问题:您可以使用代码隐藏和 OnKeyDown/OnKeyUp 或 Preview 事件来实现此行为。

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if(e.SystemKey == Key.LeftAlt)
        {
            myMenu.Visibility = Visibility.Visible;
            // e.Handled = true; You need to evaluate if you really want to mark this key as handled!
        }

        base.OnKeyDown(e);
    }

当然 cou 也可以在此代码中触发您的命令。

于 2012-05-15T09:49:23.947 回答