WPF:按下 Alt 键时,我的上下文菜单无法打开



在我的WPF应用程序中,当ContextMenu打开时,我想根据是否按下Alt键来调整其菜单项。

我已经使逻辑工作了。XAML:

<my:Control ContextMenuOpening="MyContextMenu_Opening" />
代码:

private void MyContextMenu_Opening(object sender, RoutedEventArgs args) {
  bool isAltDown = Keyboard.IsKeyDown(Key.LeftAlt);
  /* tweak menu items here */
}

我的问题是,当按下Alt键时,上下文菜单打开,然后立即关闭(我可以在它打开的闪光中看到我的逻辑至少是工作的)。

我想知道这是一个WPF的"功能",因为如果我甚至保持Alt,而右键单击TextField,同样的事情发生-内置的剪切/复制/粘贴菜单闪烁打开,然后立即关闭。

一种预感是,它与Alt激活应用程序菜单栏有关。但是一个应用程序菜单栏并不适用于我的情况,所以如果解决方案涉及到搞乱它,它仍然适用于我。

这是MenuBase类的内置行为:

        protected override void OnKeyDown(KeyEventArgs e)
        {
            .....
            if (((e.SystemKey == Key.LeftAlt) || (e.SystemKey == Key.RightAlt)) || (e.SystemKey == Key.F10))
            {
                this.KeyboardLeaveMenuMode();
                e.Handled = true;
            }
        }

为什么不使用另一个修饰键??

这是一个内置行为从MSDN菜单库。OnKeyDown

    If the user presses ESC, ALT+ALT, or ALT+F10, 
    this implementation marks the KeyDown event as handled 
    by setting the Handled property of the event data to true.

你仍然可以使用Alt键,只是重写基类行为:

public class AltProofContextMenu : ContextMenu
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if(!(e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt))
            base.OnKeyDown(e);
    }
}

相关内容

  • 没有找到相关文章

最新更新