我有一个上下文菜单设置为资源字典(因为它不能是用户控件):
<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) 事件回调方法没有被调用,即我没有看到“Here i am”日志。
2) 如何在开场事件中显示/隐藏一些基于复杂逻辑的上下文菜单项?基本上我在问如何从事件回调访问数据网格以便能够检索选定的行?我知道如何设置Visibility
,但我不知道如何访问DataGrid
以检索选定的模型/行。
3)ResourceDictionary
这里的路要走吗?我首先尝试过UserControl
,但它抱怨ContextMenu
不能有一个视觉父级,所以,我想我不能使用它。
谢谢您的帮助!