没什么可说的,只是可以进入事件处理程序。
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相同。
答案 0 :(得分:1)
那是因为MenuItem
处理事件并且不让它传播。你需要做些什么吗?没有告诉我们,很难提供建议。您是否考虑过使用PreviewMouseRightButtonDown
事件?
答案 1 :(得分:0)
我认为您需要了解MouseDown
事件与其他鼠标事件之间的关系,例如MouseLeftButtonDown
和MouseRightButtonDown
。请阅读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);
}
}