当我使用以下包语法包含包含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的答案标记为正确。
答案 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();
}
}
}