在WPF ContextMenu中捕获修饰符 - 键

时间:2015-05-26 11:40:20

标签: wpf contextmenu

我想使用LeftAltRightAlt键在开放的ContextMenu中更改MenuItems。我希望这一切都在菜单已经打开时发生 - 而不是在单击鼠标右键打开上下文菜单时。我做了以下事情:

ContextMenu.KeyDown += ContextMenu_KeyDown;

void ContextMenu_KeyDown(object sender, KeyEventArgs e)
    {
        if( e.Key == Key.LeftAlt || e.Key == Key.RightAlt )
        {
            e.Handled = true;
            // DEMO
            MenuItem firstItem = this.ContextMenu.Items[0] as MenuItem;
            if( firstItem != null ) firstItem.Header = "Alt Pressed!";
        }
    }

不幸的是,这不起作用。只要按下Alt键,即使我使用e.Handled = true;,ContextMenu也会关闭。为什么是这样?如何捕获Alt-Keys并更改上下文菜单并使菜单保持打开状态?

1 个答案:

答案 0 :(得分:0)

根据这篇文章(WPF: When Alt key is pressed, my ContextMenu won't open),它是MenuBase类的内置行为。您需要选择另一个修改键才能完成此操作。

以下是解释它的MSDN页面:https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.menubase.onkeydown.aspx