2013-08-20 114 views
1

我想通過按Ctrl +菜單以獨佔方式打開以下上下文菜單:打開上下文菜單,按ctrl +菜單

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

我有這勢必會在窗口中的按鈕另一個上下文菜單。我希望能夠打開窗口上下文菜單,不管元素是什麼。爲了防止窗口上下文無法在任何時間打開,例如該按鈕是重點。

我試圖打開它:

Context.Menu.name.isOpened = true; 

檢查pressedKey事件之後,但在文本菜單釋放菜單按鈕後立即關閉。 有誰知道更好..和工作方式?

+1

什麼是「應用程序按鈕」?你的意思是Windows密鑰? http://en.wikipedia.org/wiki/Windows_key – SvenG

+0

哦,event.Key被稱爲應用程序...我的意思是這一個:http://www.lytebyte.com/wp-content/uploads/2008/ 05/right-click-keyboard-key.jpg – marcel

+0

回到我的時代,這就是所謂的菜單鍵。這是有道理的,因爲它被用來調用上下文菜單。 [顯然它也被稱爲應用程序密鑰](http://en.wikipedia.org/wiki/Menu_key)。我不知道爲什麼。 –

回答

1

我認爲你將不得不關閉在窗口菜單鍵,否則OS將盡力解決它..

類似的東西:

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

    } 

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

,又重新打開自己的上下文菜單編程。

+0

我試圖在我的eventlistener中使用e.handled,但它並沒有工作,雖然 – marcel

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;

0

唉,菜單按鈕觸發keyUp事件...我一直在聽keyDown事件。這就是爲什麼菜單在鍵上打開並通過釋放菜單按鈕關閉菜單的原因。

相關問題