我有一个包含多个用户控件的程序集。对于此用户控件程序集,我想要一个资源字典。程序集中的所有用户控件都应该能够访问资源字典。我必须添加
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
应该使用资源字典的每个用户控件,还是有某种方法将它放在一个地方并只是引用它?
我可以在主应用程序中引用它,还是需要MergedDictionaries调用呢?
编辑:主应用程序位于与用户控件不同的项目/程序集中。
答案 0 :(得分:11)
有什么方法可以把它放在一个地方并引用它吗?
将您的资源词典的合并词典引用放入“App.xaml”文件中,并且可以在整个应用程序中访问它,不需要进一步参考。
我可以在主应用程序中引用它,还是需要MergedDictionaries调用呢?
没有'App.xaml'的范围落在整个应用程序上,所以这应该可以正常工作(对我来说:) :)。
更新:如何从用户控件中引用资源字典存储的项目。
在主项目中添加对用户控件库的引用。您的用户控件可以访问,您可以根据需要在您的应用程序中使用它们。
在App.xaml中添加资源字典引用的过程意味着所有控件都可以引用资源字典中定义的样式和数据模板等,因此它仅仅是引用它们的问题:
e.g。
Style="{StaticResource MyButtonStyle}"
此方法适用于复合应用程序和常规WPF应用程序。请注意,Visual Studio不擅长从Linked XAML文件(资源字典)加载这些样式,但表达式混合处理它并将为编辑器预览。
答案 1 :(得分:3)
您可以使用 Pack URL 来引用程序集中的资源字典。例如,在Prism项目(有多个模块,每个模块都在自己的程序集中)中,我将公共资源字典存储在标题为 Common 的项目的 ResourceDictionaries 文件夹中。然后我根据需要将这些词典合并到应用程序的模块中,在每个模块的XAML视图中使用与此类似的标记:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/ResourceDictionaries/DemoDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
您可以找到更多信息here。
答案 2 :(得分:2)
如果“App.xaml”方法对您不起作用,那么您可能会参与此讨论:
Best Practices: How to handle shared resources in a modular application?
JBE