WPF ResourceDictionary x:类功能未触发

时间:2018-04-21 19:51:11

标签: c# wpf resourcedictionary

我目前正在尝试向ResourceDictionary添加功能,方法是声明它的x:Class并将On Click事件链接到所述类中的函数。这是一个例子:

我在哪里链接x:Class enter image description here

我将x:Class函数链接到On Click事件: enter image description here

我的x:Class的来源:

using System;
using System.Windows;

namespace VoidwalkerEngine.Editor.Resources.Themes.Styles
{
    public partial class VoidwalkerCellBrowserTreeView : ResourceDictionary
    {
        public VoidwalkerCellBrowserTreeView()
        {
            InitializeComponent();
        }

        private void BaseTreeView_NewFolder_Click(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Test"); // This should be fired when I click on "New Folder"
        }
    }
}

单击之前菜单项的图片: enter image description here

单击菜单项后,应打印"测试"到控制台。然而,没有任何反应。显然,我必须做错事。我也找到了一个与我相似的问题:Control event not firing from class linked to resource dictionary wpf

他们的建议是在.csproj文件中添加一行,我做了: enter image description here

然而,这仍然无效。显然我还没有正确地联系到某些东西,我只是不知道如何从这里开始。 有谁知道如何正确地将ResourceDictionary与它连接?sx:Class?我的项目没有丢失错误,Visual Studio甚至自动完成了BaseTreeView_NewFolder_Click函数到x:类文件,所以我知道源文件本身附加得很好。

编辑1: 这是完整的XAML ResourceDictionary:https://pastebin.com/8UepKGTa

编辑2: 在测试了一些东西后,我发现了一些非常奇怪的东西。显然,我将触发默认构造函数中的任何控制台命令,但不会触发任何方法。这是一张图片:

enter image description here 我现在真的很亏。类IS链接很好,但无论出于何种原因,函数都不会链接到它。

1 个答案:

答案 0 :(得分:1)

您无需在csprroj中手动添加该内容。 它的工作方式就像一扇窗户。 您需要在资源字典中引用该类:

代码文件必须从resourcedictionary继承并成为部分类:

namespace MapEditor
{
    public partial class TerrainResources : ResourceDictionary

你需要初始化组件:

    public TerrainResources()
    {
        InitializeComponent();
    }

类属性构建操作应该是编译编译 当然资源字典必须是构建操作页面。

查看您的代码,乍一看它看起来应该有效。 你有一个很长的命名空间。 对于深层文件夹结构和非常长的命名空间,VS无法很好地使用。

您的menuitem在哪里? 我在那里使用我的代码来处理加载的事件,并且从资源字典中的datatemplates中使用它:

<DataTemplate DataType="{x:Type local:SwampVM}">
    <Polygon Points="{Binding Points}"
             Fill="YellowGreen"
             local:TerrainProp.TerrainCanvas="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}"
             FrameworkElement.Loaded="Terrain_Loaded"

您的上下文菜单必须是资源字典中的资源才能使用该事件。