我有两个类库项目: 项目A.Themes 项目B.Themes
项目A.Themes是我的基础主题项目。 项目B.Themes使用A.Themes并且有新的样式和一些资源具有已在A.Themes中定义的键。
我们希望在我们的项目中使用这两个主题,如果我们使用在两个项目中定义的资源,我们想从B.Themes中获取资源。
这是我们的代码:
A.Themes几个样式文件:
Brushes.xaml
Buttons.xaml
CheckBox.xaml
等。
我们在Bundle.Xaml中加载它们:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/A.Themes;component/Assets/Brushes.xaml"/>
<ResourceDictionary Source="pack://application:,,,/A.Themes;component/Assets/Buttons.xaml"/>
<ResourceDictionary Source="pack://application:,,,/A.Themes;component/Assets/CheckBox.xaml" />
</ResourceDictionary.MergedDictionaries>
B.Themes具有相同的文件:
Brushes.xaml
Buttons.xaml
CheckBox.xaml
我们将它们加载到Bundle.Xaml中并添加A.Themes包
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/A.Themes;component/Bundle.xaml"/>
<ResourceDictionary Source="pack://application:,,,/B.Themes;component/Assets/Brushes.xaml"/>
<ResourceDictionary Source="pack://application:,,,/B.Themes;component/Assets/Buttons.xaml"/>
<ResourceDictionary Source="pack://application:,,,/B.Themes;component/Assets/CheckBox.xaml" />
</ResourceDictionary.MergedDictionaries>
在我们的项目中,我们将它们加载到App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/A.Themes;component/Bundle.xaml"/>
<ResourceDictionary Source="pack://application:,,,/B.Themes;component/Bundle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
问题是: 1.它并不总是从B.Themes获取资源,我们无法找出原因。 2.如果我从app.xaml删除对A.Themes / Bundle.xaml的引用,项目无法从A.Themes中找到资源,即使它包含在B.Themes / Bundle.xaml
中请注意: 我们参考B.Themes中的A.Themes项目 并参考主要项目中的A.Themes和B.Themes
有人可以帮助我理解这里发生的事情吗? 谢谢!
答案 0 :(得分:2)
装货单并不是您所期望的。来自MSDN:
合并字典中的资源占用资源查找范围中的位置,该位置就在它们合并到主资源字典的范围之后
https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/merged-resource-dictionaries
因此,合并到程序集A的Bundle.xaml
的字典实际上是在其他字典之后加载的。
有关更多信息和相同行为的示例,请参阅以下链接:https://social.msdn.microsoft.com/Forums/vstudio/en-US/3bea80f9-d1db-4cb7-ae7a-77a02eaf4ec9/resourcedictionary-load-order?forum=wpf