1

我想通过按 ctrl + menu 专门打开以下上下文菜单:

<Window.ContextMenu>
    <ContextMenu>
        <MenuItem Name="item0" Header="mode_0"/>
    </ContextMenu>
</Window.ContextMenu>

我有另一个上下文菜单,它绑定到窗口中的一个按钮。无论关注什么元素,我都希望能够打开窗口上下文菜单。为了防止在任何时候都无法打开窗口上下文,例如按钮被聚焦。

我尝试通过以下方式打开它:

Context.Menu.name.isOpened = true;

检查pressedKey事件后,但释放菜单按钮后contextMenu立即关闭。有谁知道更好的..和工作方式?

4

3 回答 3

2

我认为您必须禁用窗口中的菜单键,否则操作系统将尝试解决它..

像这样的东西:

    public MainWindow()
    {
      InitializeComponent();
      this.PreviewKeyUp += MainWindow_PreviewKeyUp;

    }

    void MainWindow_PreviewKeyUp(object sender, KeyEventArgs e)
    {
      if (e.Key == Key.Apps)
      {
        e.Handled = true;
      }
    }

然后以编程方式打开您自己的上下文菜单。

于 2013-08-20T08:58:01.123 回答
1

不确定我是否正确理解您在寻找什么。
你可能应该这样做:

定义一个命令

 OpenMenu = new RoutedUICommand("OpenMenu ", "OpenMenu ", typeof(Commands), new   InputGestureCollection { 
                new KeyGesture(Key.O, ModifierKeys.Control, "Ctrl+O") });

在你的窗口中使用它

    <Window.CommandBindings>
        <CommandBinding Command="local:Commands.OpenMenu "
                        Executed="OpenMenuExecuted" />
   </Window.CommandBindings>

    private void OpenMenuExecuted(object sender, ExecutedRoutedEventArgs e)
    {
           this.ContextMenu.IsOpen = true;          
    }

注意:如果您不希望右键单击按钮打开窗口ContextMenu,您可以通过附加 ContextMenuOpening事件处理程序并设置e.Handled = true;

于 2013-08-20T08:57:03.277 回答
0

啊,菜单按钮在 keyUp 事件上触发……我一直在听 keyDown 事件。这就是菜单在按下键时打开并通过释放菜单按钮来关闭的原因。

于 2013-08-20T09:31:31.243 回答