我有一个用户控件,就像这样:
<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
。
ContextMenu
不能有逻辑或视觉父级。也就是说,上下文菜单只能用于 UI 元素的 ContextMenu 属性值,而不能作为元素使用。这还有另一个问题:我无法监听OnContextMenuOpening
事件。 - TowerOnContextMenuOpening
事件并对打开的菜单进行一些操作。不幸的是,菜单从未触发该事件 - 只有放置目标。请参见:http://connect.microsoft.com/VisualStudio/feedback/details/353112/contextmenu-opening-event-doesnt-fire-properly<DataGrid ContextMenu="{usercontrols:MyContextMenu}"
时,我得到了预期类型为'ContextMenu'的错误。我是否漏掉了什么? - Carbine