【问题标题】:Shared resource dictionary between several user controls and across assemblies多个用户控件和程序集之间的共享资源字典
【发布时间】:2009-03-31 20:59:13
【问题描述】:

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

<UserControl.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      ...
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</UserControl.Resources>

对于应该使用资源字典的每个用户控件,或者有什么方法可以将它放在一个地方并只是引用它?

然后我是否可以在我的主应用程序中引用它,或者这是否也需要 MergedDictionaries 调用?

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

【问题讨论】:

    标签: c# wpf resources


    【解决方案1】:

    有没有办法把它放在一个地方并引用它?

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

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

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

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

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

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

    例如

    Style="{StaticResource MyButtonStyle}"
    

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

    【讨论】:

    • 那么当用户控件位于单独的项目/程序集中时,我如何在用户控件中利用这些资源?
    • 我已经成功了!谢谢。我有资源在我的应用程序中工作,只是不确定如何让这些资源在用户控件中工作。我没有意识到当控件添加到应用程序时它会起作用。我认为视觉工作室设计师没有展示它的事实让我很震惊。
    • 使用 Expression Blend,视觉设计方面要好得多(资源会流下来)。
    • 所以我以为我已经成功了,而且几天似乎没问题。但现在我无法在设计器中查看我的用户控件。我收到“找不到静态资源引用'资源名称'”的错误。另外,我现在无法查看任何具有这些用户控件之一的窗口。
    • 我的情况和dan一样。几天来,我对 app.xaml 中合并的资源字典的静态资源引用没有任何问题,但现在静态资源引用在设计器中不起作用。我不知道如何解决这个问题,现在已经花了几个小时阅读这个问题
    【解决方案2】:

    您可以使用 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

    【讨论】:

      【解决方案3】:

      如果“App.xaml”方法不适合您,那么您可能会对本次讨论感兴趣:

      Best Practices: How to handle shared resources in a modular application?

      jbe

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多