MenuItem不会触发MouseRightButtonDown事件

时间:2011-06-16 11:59:15

标签: c# .net wpf events xaml

没什么可说的,只是可以进入事件处理程序。

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相同。

2 个答案:

答案 0 :(得分:1)

那是因为MenuItem处理事件并且不让它传播。你需要做些什么吗?没有告诉我们,很难提供建议。您是否考虑过使用PreviewMouseRightButtonDown事件?

答案 1 :(得分: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);
    }
}