[英]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.