1

我有一个上下文菜单设置为资源字典(因为它不能是用户控件):

<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不能有一个视觉父级,所以,我想我不能使用它。

谢谢您的帮助!

4

0 回答 0