【问题标题】:WPF ResourceDictionary x:Class Function Not FiringWPF ResourceDictionary x:类函数未触发
【发布时间】:2018-04-21 19:51:10
【问题描述】:

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

我在哪里链接 x:Class

我将 x:Class 函数链接到 On Click 事件:

还有我的 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"
        }
    }
}

在我单击之前菜单项的图片:

单击菜单项后,它应该将“测试”打印到控制台。然而,什么也没有发生。显然,我一定做错了什么。我还在这里找到了一个与我类似的问题:Control event not firing from class linked to resource dictionary wpf

他们的建议是在 .csproj 文件中添加额外的一行,我这样做了:

但是,这仍然不起作用。显然我仍然没有正确链接某些东西,我只是不知道如何从这里开始。 有人知道如何正确地将 ResourceDictionary 与它的 x:Class 链接起来吗? 我的项目没有抛出任何错误,Visual Studio 甚至自动完成了 x:Class 文件中的 BaseTreeView_NewFolder_Click 函数,所以我知道源文件本身附上就好了。

编辑 1: 这是完整的 XAML 资源字典:https://pastebin.com/8UepKGTa

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

我现在真的很茫然。该类的链接很好,但无论出于何种原因,函数都不会链接到它。

【问题讨论】:

  • 是的,我什么都试过了。我不知道为什么这不起作用。在规定的时间过后,我将打开它以获取赏金。
  • 投反对票的原因?有什么办法可以改善这个问题吗?
  • 如果您在事件处理程序中调用MessageBox.Show("") 会怎样?
  • @mm8 感谢您的回复。您的问题与上面提到的结果相同,唯一可以执行的代码是在所述类的构造函数中。没有函数被触发。我还是不知道为什么。

标签: c# wpf resourcedictionary


【解决方案1】:

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

代码文件必须继承自resourcedictionary并且是一个partial class:

namespace MapEditor
{
    public partial class TerrainResources : ResourceDictionary

你需要初始化组件的东西:

    public TerrainResources()
    {
        InitializeComponent();
    }

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

查看您的代码,乍一看它应该可以工作。 你有一个很长的命名空间。 VS 不能很好地处理深层文件夹结构和很长的命名空间。

您的菜单项在哪里? 我在那里使用我的代码来加载事件,并且从该资源字典中的数据模板中使用:

<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"

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

【讨论】:

  • 类已设置为“编译”,xaml 已设置为“页面”。给我几分钟,因为我现在正在尝试其他一些事情。我真的很讨厌这样的时刻,因为一切看起来都应该正常工作。
  • 嗯,我刚刚注意到的一件事是我拼错了 DependentUpon,(为什么 Visual Studio 没有提醒我?),即使修复了它,它仍然无法正常工作。
  • 这里是完整的 XAML 资源字典:pastebin.com/8UepKGTa
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2010-09-24
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多