考虑以下XAML:
<Window x:Class="ContextMenuEvent.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" ContextMenuOpening="Window_ContextMenuOpening">
<Grid>
<Button>Ok</Button>
</Grid>
</Window>
右键单击该按钮会导致ContextMenuOpening触发,即使实际上没有显示上下文菜单。
为什么会这样?只有当上下文菜单真正打开时,我才能做到均匀?
我知道我可以使用ContextMenu.Opened事件,但这只会涵盖单个上下文菜单,我想要覆盖表单中的所有(现有)上下文菜单。
答案 0 :(得分:3)
不太清楚为什么要使用这种方法。但是,您可以轻松检查是否显示上下文菜单。像这样:
private void Window_ContextMenuOpening(object sender, ContextMenuEventArgs e) {
var menu = (e.Source as FrameworkElement).ContextMenu;
if (menu != null) {
// etc..
}
}
答案 1 :(得分:0)
您将使用ContextMenuEventArgs参数的source元素,并将其强制转换为System.Windows.Controls.Control(或者是覆盖所有点击的通用内容)。然后,您可以检查ContextMenu属性。