我将上下文菜单设置为资源字典(因为它不能是用户控件):
<ResourceDictionary x:Class="Test.FooGridContextMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ContextMenu x:Key="FooGridContextMenu" ContextMenuOpening="OnContextMenuOpening">
</ContextMenu>
</ResourceDictionary>
我将它用于数据网格:
<DataGrid ContextMenu="{DynamicResource FooGridContextMenu}">...
上下文菜单资源的代码是:
using System;
using System.Windows;
using System.Windows.Controls;
namespace Test
{
public partial class FooGridContextMenu : ResourceDictionary
{
public FooGridContextMenu()
{
InitializeComponent();
}
void OnContextMenuOpening(object sender, ContextMenuEventArgs e)
{
Console.WriteLine("here i am");
}
}
}
问题:
1)事件回调方法没有被调用,即我没有看到“我在这里”的日志。
2)如何在开幕活动中根据复杂的逻辑显示/隐藏一些上下文菜单项?基本上我问我如何从事件回调访问数据网格,以便能够检索选定的行?我知道如何设置Visibility
,但我不知道如何访问DataGrid
来检索所选的模型/行。
3)ResourceDictionary
要走这条路吗?我首先尝试UserControl
,但它抱怨ContextMenu
无法拥有视觉父级,因此,我想我无法使用它。
感谢您的帮助!