在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件
收藏
WPF的ContextMenu没有类似WinForm里面ContextMenu.SourceControl的概念,但是你可以通过ContextMenuService的GetPlacementTarget方法来获取类似的效果。
很多时候,我们会希望在WPF的资源文件里面定义一个通用的右键弹出菜单,然后将这个菜单通过定义在各个控件的ContextMenu属性来设置用户右击控件时弹出菜单。然而因为WPF的一些设计不足,你不能在右键菜单的点击事件处理函数中获知右键菜单弹出时,鼠标的焦点是在哪个控件上?
例如下面的代码:
XAML代码:
x:Key="sampleContextMenu">
/>
...
ContextMenu="{StaticResource sampleContextMenu}"
/>
ContextMenu="{StaticResource sampleContextMenu}"
/>
Header="TreeViewItem3"/>
/>
C#代码:
public
void WhoBringMeOut(object sender, RoutedEventArgs e)
{
// sender的值是被点击的MenuItem,而不是触发右键菜单
// 弹出的