我有一个用户控制是这样的:如何在WPF中使用ContextMenu UserControl?
<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
“文本菜单本身是一个FrameworkElement派生类,但此 事件不会从正在打开的上下文菜单中产生,作为 源。事件由作为属性“拥有”上下文 菜单的元素引发,并且仅在用户尝试在UI中打开一个 上下文菜单。“
此事件问题是我为用户控件放置菜单的原因 - 以便用户控件可以获取事件并完成工作。
更新:我试图把它作为一个根元素和扩展的上下文菜单:
和代码隐藏:
但我得到:ContextMenu cannot have a logical or visual parent
。
我很乐意提供建议。但是,你的工作不起作用,因为“ContextMenu不能有逻辑或可视的父母”。您不能将'ContextMenu'定义为根元素。 – Tower
作为什么根元素?我只是从它衍生出来的,它的工作原理。 – Clemens
不适合我。它抱怨'ContextMenu'不能有一个逻辑的或可视化的父亲。即,这意味着上下文菜单只能用于UI元素的ContextMenu属性值,而不能用作元素。这也有另一个问题:我不能听'OnContextMenuOpening'事件。 – Tower