2013-03-06 78 views
2

在我的WPF應用程序中,當ContextMenu正在打開時,我想根據是否按下Alt鍵來調整其菜單項。WPF:當按下Alt鍵時,我的ContextMenu將不會打開

我有邏輯工作。 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激活應用程序菜單欄有關。但是應用菜單欄並不適用於我的情況,所以如果解決方案涉及到這個問題,它仍然適用於我。

回答

3

這是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; 
      } 
     } 

爲什麼不使用其他鍵修改?

+0

是的,我想我會按照你的建議使用其他修飾鍵。我已經注意到這種行爲發生在整個Windows上(例如在開始>運行對話框的文本字段中),所以我想至少WPF與其餘的Windows設計工作是一致的... – Ross 2013-03-06 14:13:53

1

這是一個建立在行爲 從MSDN MenuBase.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. 
相關問題