[英]How to use a ContextMenu UserControl in WPF?
我有这样的用户控件:
<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/反馈/信息/ 353112 /文本菜单打开-事件犯规火,正确
“ContextMenu本身是一个FrameworkElement派生类,但不会从作为源打开的上下文菜单中引发此事件。该事件是从”拥有“上下文菜单作为属性的元素引发的,仅在用户引发时才会引发尝试在UI中打开上下文菜单。“
此事件问题是我为用户控件放置菜单的原因 - 以便用户控件可以获取事件并完成工作。
更新:我尝试将其作为根元素并扩展上下文菜单:
代码隐藏:
但我得到: ContextMenu cannot have a logical or visual parent
。
无论您如何调用UserControl,它都不是ContextMenu。 您必须从ContextMenu而不是UserControl派生:
<ContextMenu x:Class="MyApp.MyContextMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<MenuItem Header="Item 1"/>
<MenuItem Header="Item 2"/>
...
</ContextMenu>
和
public partial class MyContextMenu : ContextMenu
{
public MyContextMenu()
{
InitializeComponent();
}
}
但是你为什么要这样做呢?
尝试定义如下:
<DataGrid.Resources>
<ContextMenu x:Key="DgContextMenu">
...
</ContextMenu>
</DataGrid.Resources>
在使用之后就像
<DataGrid ContextMenu="{StaticResource DgContextMenu}
应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.