我有一个 WPF .net 4.5 应用程序,在合并资源字典时遇到问题。
我有与This SO question和This Question完全相同的问题,但接受的解决方案对我不起作用。
我在 app.xaml 中声明了一个资源字典,如下所示(为清楚起见进行了简化):
<Application.Resources>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml" />
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
问题: 应用程序可以“看到”在 app.xaml 中列出的 ColorStyles 字典,但如果我将其移动/嵌套在 ResourceLibrary.xaml 中,则应用程序不会“看到”ColorStyles.xaml 并且有关缺少静态资源的错误出现。
这是我创建 ResourceLibrary.xaml 字典(简化)的方法:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<!-- BRUSHES AND COLORS -->
<ResourceDictionary Source="Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
更改原因:我当前的资源字典组织很糟糕,我需要更改它(因为我不止一次创建对象)。我想在“皮肤”文件夹中有一个资源字典,然后是用于组织剩余样式字典的子文件夹,这些字典将全部合并到 ResourceLibrary.xaml 文件中,该文件又将在 app.xaml 中调用。
我尝试了什么: 是的,我确实尝试使用上面链接中的解决方案:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</Application.Resources>
但我在虚拟样式行收到以下错误:
错误 2 属性元素不能位于元素内容的中间。它们必须在内容之前或之后。
由于 lisp 注释,将代码更改为以下代码消除了上面的错误:
<Application.Resources>
<ResourceDictionary>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"></ResourceDictionary>
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
<ResourceDictionary Source="Skin/NamedStyles/AlertStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
但资源库仍未被调用。
我还尝试将所有文件路径更改为打包 URI,但这也没有解决问题。
我尝试将 resourceLibrary.xaml 和其他资源字典移动到不同的类库项目中(使用与上述相同的文件夹结构和文件)。然后我使用了以下 URI,但我仍然无法访问在 ResourceLibrary.xaml 文件中声明的资源。
<ResourceDictionary Source="pack://application:,,,/FTC.Style;component/ResourceLibrary.xaml" />
但同样,如果我将每个资源字典添加到 App.Xaml 文件中,使用上面的 UIR 格式,这些资源是可用的。
错误消失了,但我仍然无法使用作为 ResourceLibrary.xaml 文件中合并字典一部分的资源。我倾向于同意 dowhilefor 关于我是否应该使用这种方法的评论,但我想弄清楚这一点,因为这个问题的最常见解决方案(参见本文顶部的链接)不起作用,也许这个解决方案可以帮助别人。
问题: 为什么 ResourceLibrary.xaml 文件被忽略?