3

我正在阅读有关 ResourceDictionary 的信息,但遇到了一个令人困惑的问题。

看来我每个 XAML 只能有 1 个 ResourceDictionary。所以,如果我想使用多个,我可以合并 ResourceDictionaries。

如果我可以合并字典,那么“全局”样式应该在哪里?我可以拥有一个 ApplicationResourceDictionary,其中包含在整个应用程序中保持一致的所有样式,或者,我可以将此信息保存到 App.xaml 文件中。两者似乎都是有效的选项,但我不知道是不是这样。

这是关于个人选择还是一个比另一个更好?将它们保留在 ResourceDictionaries 中似乎会更好,因为所有样式都放在一起(在字典中),而不是在 XAML 页面中拆分一些样式。

4

1 回答 1

7

我们当前的解决方案中有 100 多个项目。每个人都需要访问一些资源字典,其中包含用于主题和统一性等的全球资源。我所做的是将资源字典集中在一个项目中,其他项目参考,在这种情况下,我们称之为“基础设施”,然后我提供字典直接通过他们自己的 app.xaml 到每个项目,并使用合并的字典,例如;

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Our.Client.Infrastructure;component/Resources/Styles/ResDictName1.xaml" />
        <ResourceDictionary Source="/Our.Client.Infrastructure;component/Resources/Styles/ResDictName2.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

到目前为止效果很好,我使样式应用全局的方式是在我们的自定义资源字典之一的底部指定它们,并从默认资源字典中删除相同的声明。例如,如果你发现;

<Style BasedOn="{StaticResource DefaultButtonStyle}" TargetType="Button" />

在您的 Default CoreStyles.xaml 或 SdkStyles.xaml 或其他任何内容中,我只是将其删除,然后将该声明移至我们的自定义资源字典的底部并相应地更改它;

<Style BasedOn="{StaticResource OurSuperAwesomeCustomNewGlobalButtonStyle}" TargetType="Button" />

瞧……任何Button此后默认继承我们的自定义样式,而不是原始的默认模板。一旦您采用它,整个解决方案只有一两个资源字典的优势就会变得非常明显。也就是说,只要模板实际上需要全局可用。如果您将模板用于仅与其使用的视图相关的临时模板,请将其明确保存在该视图中,如果没有其他需要,则无需将其保存在其他地方。

希望这可以帮助。

于 2013-04-03T18:44:23.403 回答