合并ResourceDictionary与App.xaml

时间:2013-04-03 13:35:42

标签: xaml resourcedictionary

我正在阅读关于ResourceDictionary的内容,并且已经陷入了困惑。

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

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

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

1 个答案:

答案 0 :(得分: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" />

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

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

并且瞧...之后任何Button默认继承我们的自定义样式而不是原始默认模板。一旦采用它,只需一个或两个资源字典即可为您的整个解决方案带来明显的优势。也就是说,只要模板实际上需要全局可用。如果你使用的模板只是与其使用的视图相关的adhoc,请明确地将其保存在该视图中,如果没有别的需要,则无需将其保留在其他地方。

希望这会有所帮助。

相关问题