WinUI 3支持多层嵌套ResourceDictionary吗?能否访问Button1字典?
WinUI 3中多层嵌套ResourceDictionary的支持与访问方式
WinUI 3完全支持这种多层嵌套的ResourceDictionary结构,你可以通过代码后台或者特定的XAML语法来访问嵌套的Button1字典及其内部资源。
一、代码后台访问方式
通过逐层索引的方式,就能获取到嵌套的目标字典及资源:
// 获取应用全局资源字典 var rootResourceDict = Application.Current.Resources; // 取出Dark主题对应的字典 if (rootResourceDict.ThemeDictionaries.TryGetValue("Dark", out object darkDictObj) && darkDictObj is ResourceDictionary darkDict) { // 取出Dark字典下的Button1子字典 if (darkDict.TryGetValue("Button1", out object button1DictObj) && button1DictObj is ResourceDictionary button1Dict) { // 访问Button1字典内的具体资源,比如ButtonBackground if (button1Dict.TryGetValue("ButtonBackground", out object brushObj) && brushObj is SolidColorBrush backgroundBrush) { // 此处可直接使用获取到的背景画刷 } } }
二、XAML中直接引用资源
如果要在XAML里直接使用Button1字典中的资源,可通过多层静态资源嵌套引用的方式:
<Button Background="{StaticResource {StaticResource Dark}[Button1][ButtonBackground]}" Content="测试按钮" />
需要注意的是,这种嵌套字典结构不会自动参与WinUI默认的主题切换资源合并逻辑。如果需要跟随系统主题自动切换,建议将按钮相关的主题资源拆分到独立的ResourceDictionary文件中,再通过ResourceDictionary.MergedDictionaries引入,这样更契合WinUI主题系统的设计逻辑。
内容的提问来源于stack exchange,提问作者holycreeper
相关产品推荐
相关产品推荐

