合并ResourceDictionary与App.xaml

Dav*_*ave 3 xaml resourcedictionary

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

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

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

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

Chr*_* W. 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>
Run Code Online (Sandbox Code Playgroud)

到目前为止工作得非常出色,我将样式应用于全局的方式虽然在我们的一个自定义资源字典的底部指定它们,并从默认资源字典中删除相同的声明.例如,如果你发现;

<Style BasedOn="{StaticResource DefaultButtonStyle}" TargetType="Button" />
Run Code Online (Sandbox Code Playgroud)

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

<Style BasedOn="{StaticResource OurSuperAwesomeCustomNewGlobalButtonStyle}" TargetType="Button" />
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.