在 WPF 上下文菜单中捕获修改键

Catching Modifier-Keys in WPF ContextMenu

我想使用 LeftAltRightAlt 键在打开的上下文菜单中更改 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;。为什么是这样?如何捕捉 Alt 键并更改上下文菜单并使菜单保持打开状态?

根据此post (WPF: When Alt key is pressed, my ContextMenu won't open),它是 MenuBase class 的内置行为。您将需要选择另一个修改键来完成此操作。

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