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

Dan*_*gel 17 c# wpf resources

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

<UserControl.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      ...
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:主应用程序位于单独的项目/程序集中,而不是用户控件.

hol*_*see 11

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

将您的合并词典引用到您的"App.xaml"文件中,并将其整个应用程序访问,您将无需进一步参考.

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

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

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

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

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

例如

Style="{StaticResource MyButtonStyle}"
Run Code Online (Sandbox Code Playgroud)

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

  • 所以我以为我有它工作,几天似乎没问题.但现在我无法在设计器中查看我的用户控件.我收到错误,"找不到"StaticResource引用'资源名称'".此外,我现在无法查看任何具有其中一个用户控件的窗口. (3认同)
  • 那么当用户控件位于单独的项目/程序集中时,如何在我的用户控件中利用这些资源? (2认同)