2011-06-16 52 views
1

不必多說,只需進入事件處理程序即可。MenuItem不會觸發MouseRightButtonDown事件

XAML:

<Grid> 
    <Menu IsMainMenu="True" x:Name="x"> 
     <MenuItem Header="_File" /> 
     <MenuItem Header="_Edit" /> 
     <MenuItem Header="_View" /> 
     <MenuItem Header="_Window" /> 
     <MenuItem Header="_Help" /> 
    </Menu> 
</Grid> 

後面的代碼:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     foreach (var item in x.Items) 
     { 
      ((MenuItem)item).MouseRightButtonDown += MainWindow_MouseRightButtonDown; 
     } 
    } 

    void MainWindow_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     // Can't get here 
    } 

} 

P.S - 用的MouseRightButtonUp,和的MouseLeftButtonDown的MouseLeftButtonUp同樣的事情。

回答

1

這是因爲MenuItem處理事件並且不讓它傳播。有什麼特別的你需要做的?如果沒有告訴我們,很難提供建議。你有沒有考慮過使用PreviewMouseRightButtonDown事件?

0

我認爲您需要了解MouseDown事件與其他鼠標事件(如MouseLeftButtonDownMouseRightButtonDown)之間的關係。請閱讀備註部分UIElement.MouseLeftButtonDown Event

這裏提出了兩種可能的解決方案。其中之一是以下代碼。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     foreach (var item in x.Items) 
     { 
      var menuItem = ((MenuItem)item); 
      //menuItem.MouseRightButtonDown += MainWindow_MouseRightButtonDown; 
      menuItem.AddHandler(UIElement.MouseRightButtonDownEvent, new RoutedEventHandler(MainWindow_MouseRightButtonDown), true); 
     } 
    } 

    void MainWindow_MouseRightButtonDown(object sender, RoutedEventArgs e) 
    { 
     Debug.WriteLine("Handled:{0}\r\nOriginalSource: {1}\r\nSource:{2}\r\nRoutedEvent:{3}", 
        e.Handled, e.OriginalSource, e.Source, e.RoutedEvent); 
    } 
}