Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 显示/隐藏基于DataGrid';什么样的选择?_Wpf_Xaml_User Controls_Contextmenu_Resourcedictionary - Fatal编程技术网

Wpf 显示/隐藏基于DataGrid';什么样的选择?

Wpf 显示/隐藏基于DataGrid';什么样的选择?,wpf,xaml,user-controls,contextmenu,resourcedictionary,Wpf,Xaml,User Controls,Contextmenu,Resourcedictionary,我将上下文菜单设置为资源字典(因为它不能是用户控件): 问题: 1) 没有调用事件回调方法,即我没有看到“我在这里”日志 2) 如何根据打开事件中的复杂逻辑显示/隐藏某些上下文菜单项?基本上,我在问如何从事件回调访问数据网格,以便能够检索所选行?我知道如何设置可见性,但我不知道如何访问数据网格,以检索选定的模型/行 3) ResourceDictionary是这里的方法吗?我首先尝试了UserControl,但它抱怨ContextMenu不能有可视的父对象,因此,我想我不能使用它 谢谢你的帮助

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

问题:

1) 没有调用事件回调方法,即我没有看到“我在这里”日志

2) 如何根据打开事件中的复杂逻辑显示/隐藏某些上下文菜单项?基本上,我在问如何从事件回调访问数据网格,以便能够检索所选行?我知道如何设置
可见性
,但我不知道如何访问
数据网格
,以检索选定的模型/行

3)
ResourceDictionary
是这里的方法吗?我首先尝试了
UserControl
,但它抱怨
ContextMenu
不能有可视的父对象,因此,我想我不能使用它


谢谢你的帮助

ContextMenuOpening事件不应该连接到DataGrid本身吗?@Dtex那么你的意思是我应该把它放在
DataGrid
上,让网格处理事件,然后让网格显示/隐藏它的上下文菜单项?嗯。我想上下文菜单应该隐藏/显示它的项目,在所有项目都属于上下文菜单之后?是的,我的意思是这将解决问题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");
        }
    }
}