多个用户控件和跨程序集之间的共享资源字典

我有一个包含多个用户控件的程序集。 对于此用户控件程序集,我想要一个资源字典。 程序集中的所有用户控件都应该能够访问资源字典。 我需要添加吗?

   ...    

应该使用资源字典的每个用户控件,还是有某种方法将它放在一个地方并引用它?

我可以在我的主应用程序中引用它,还是需要MergedDictionaries调用呢?

编辑:主应用程序位于与用户控件不同的项目/程序集中。

有没有办法把它放在一个地方,只是引用它?

将您的合并词典引用到您的资源词典中,放入“App.xaml”文件中,并且可以在整个应用程序中访问它,您无需进一步参考。

我可以在我的主应用程序中引用它,还是需要MergedDictionaries调用呢?

没有’App.xaml’的范围落在整个应用程序上,所以这应该工作正常(对我来说:))。

更新: 如何从用户控件引用资源字典存储的项目。

在主项目中添加对用户控件库的引用。 您的用户控件可以访问,您可以根据需要在您的应用程序中使用它们。

在App.xaml中添加资源字典引用的过程意味着所有控件都可以引用资源字典中定义的样式和数据模板等,因此它仅仅是引用它们的问题:

例如

 Style="{StaticResource MyButtonStyle}" 

此方法适用于复合应用程序和常规WPF应用程序。 请注意,Visual Studio不擅长从Linked XAML文件(资源字典)加载这些样式,但表达式混合处理它并将为编辑器预览。

您可以使用包URL来引用程序集中的资源字典。 例如,在Prism项目中(有多个模块,每个模块都在自己的程序集中),我将公共资源字典存储在标题为Common的项目的ResourceDictionaries文件夹中。 然后我根据需要将这些词典合并到应用程序的模块中,在每个模块的XAML视图中使用与此类似的标记:

        

您可以在此处找到更多信息。

如果“App.xaml”方法对您不起作用,那么您可能会在此讨论中受到关注:

最佳实践:如何处理模块化应用程序中的共享资源?

JBE