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

时间:2013-10-15 09:34:55

标签: c# wpf resourcedictionary

当我使用以下包语法包含包含ResourceDictionary的程序集时:

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

它按预期工作,但只要我将文件后面的代码添加到ResourceDictionary的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();
        }
    }
}

Intuition告诉我这是一个命名空间问题,但我尝试过的所有变种都失败了。我做错了什么或者这是WPF ResourceDictionaries的限制?

修改

似乎问题细节被召唤出来并被发现缺乏。

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

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

编辑2

在玩了xaml文件的构建操作后(从页面更改为资源再返回),事情开始起作用了。将Sheridan的答案标记为正确。

1 个答案:

答案 0 :(得分:1)

我认为您没有正确地声明您的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();
        }
    }
}