我有一个这样的用户控件:
<UserControl x:Class="MyApp.UserControls.MyContextMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
ContextMenuOpening="OnContextMenuOpening"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.ContextMenu>
<ContextMenu>
...
</ContextMenu>
</UserControl.ContextMenu>
</UserControl>
我的问题是:如何将上下文菜单用于数据网格之类的东西:
<DataGrid ContextMenu="{usercontrols:MyContextMenu}"
不幸的是,这不起作用,因为指定的值不正确并且预期为ContextMenu
.
注意:我需要在几个地方重复使用我的上下文菜单,所以我把它放在了自己的文件中。另外,我需要能够收听OnContextMenuOpening
事件,因为打开时的菜单需要对菜单做一些工作,并且遗憾的是,上下文菜单不会触发事件:http ://connect.microsoft.com/VisualStudio/feedback /details/353112/contextmenu-opening-event-doesnt-fire-properly
“ContextMenu 本身是一个 FrameworkElement 派生类,但不会从作为源打开的上下文菜单引发此事件。该事件是从作为属性“拥有”上下文菜单的元素引发的,并且仅在用户尝试在 UI 中打开上下文菜单。”
这个事件问题是我为用户控件放置菜单的原因——以便用户控件可以获取事件并完成工作。
更新:我试图将它作为根元素并扩展上下文菜单:
和代码隐藏:
但我得到:ContextMenu cannot have a logical or visual parent
。