我正在阅读有关 ResourceDictionary 的内容,并且遇到了一个令人困惑的问题。
看来每个 XAML 只能有 1 个 ResourceDictionary。因此,如果我想使用多个资源字典,我可以合并资源字典。
如果我可以合并字典,那么“全局”样式应该放在哪里?我可以拥有一个 ApplicationResourceDictionary,其中包含在整个应用程序中保持一致的所有样式,或者我可以将此信息保存到 App.xaml 文件中。两者似乎都是有效的选项,但我不知道情况是否如此。
这是个人选择还是一个比另一个更好?将它们保留在 ResourceDictionaries 中似乎更好,因为所有样式都在一起(在字典内),而不是在 XAML 页面中拆分一些样式。
我们当前的解决方案包含 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
此后默认继承我们的自定义样式,而不是原来的默认模板。一旦您采用整个解决方案,只拥有一两个资源字典的优势就会很快变得明显。也就是说,前提是模板实际上需要全局可用。如果您将模板用于仅与其所使用的视图相关的临时模板,请将其显式保留在该视图中,如果没有其他需要,则无需将其保留在其他地方。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)