找不到使用文件隐藏代码的 WPF 资源字典

本文关键字:WPF 资源 字典 代码 隐藏 文件 找不到 | 更新日期: 2023-09-27 18:35:28

当我使用以下包语法包含包含资源字典的程序集时:

"pack://application:,,,/WpfCore;component/ResourceDictionaries/ThemedControls.xaml"

它按预期工作,但是一旦我将代码隐藏文件添加到资源字典的 XAML,就会引发以下错误:"查找资源字典时出错"

隐藏的代码以通常的方式添加到 XAML 中:

< ResourceDictionary x:Class="com.mycompany.WpfCore.ResourceDictionaries.ThemedControls"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
</ResourceDictionary>

看起来像这样:

namespace com.mycompany.WpfCore.ResourceDictionaries
{
    public partial class ThemedControls : ResourceDictionary
    {
        public ThemedControls ()
        {
            InitializeComponent();
        }
    }
}

直觉告诉我这是一个命名空间问题,但我尝试过的所有变体都失败了。我做错了什么,还是这是 WPF 资源词典的限制?

编辑

似乎问题细节被叫出来并发现是缺乏的。

初始示例简化了命名空间。WpfCore 项目的默认命名空间是 com.mycompany.WpfCore,我现在已将其添加到上面的代码示例中。

主题控件.xaml 和主题控件.xaml.cs 文件位于 WpfCore 项目文件夹中名为 ResourceDictionaries 的子文件夹中。生成的程序集用作另一个解决方案中的引用程序集,这是使用 Pack URI 的位置。

编辑 2

在尝试了 xaml 文件的构建操作(从页面更改为资源,然后再更改)之后,事情开始工作。将谢里登的答案标记为正确。

找不到使用文件隐藏代码的 WPF 资源字典

我认为

你没有正确地声明你的ResourceDictionary......应用程序名称确实应该在命名空间中。这应该有效...至少它对我有用:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="WpfCore.ResourceDictionaries.ThemedControls">
</ResourceDictionary>

代码隐藏:

namespace WpfCore.ResourceDictionaries
{
    public partial class ThemedControls : ResourceDictionary
    {
        public ThemedControls()
        {
            InitializeComponent();
        }
    }
}