通过ctrl +菜单打开上下文菜单

时间:2013-08-20 08:19:25

标签: c# wpf contextmenu

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

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

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

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

Context.Menu.name.isOpened = true;
检查了pressedKey事件后

,但在释放菜单按钮后,contextMenu立即关闭。 有谁知道更好......工作方式?

3 个答案:

答案 0 :(得分: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;

来阻止它

答案 1 :(得分:1)

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

类似的东西:

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

    }

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

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

答案 2 :(得分:0)

Argh,菜单按钮触发keyUp-event ...我一直在听keyDown-event。这就是为什么菜单会在按键上打开并通过释放菜单按钮来关闭。