WinUI3不使用DynamicResource调用系统颜色是否有可行方案?
WinUI3中可以通过以下几种方案实现WPF中DynamicResource调用系统颜色的等效效果:
方案1:使用内置ThemeResource(优先推荐)
WinUI3 提供了ThemeResource标记扩展,原生支持响应系统主题切换、系统颜色变更,同时内置了大量和系统属性对应的资源键,完全可以覆盖WPF中SystemColors的常用场景。
你提到的高亮色需求,直接替换为如下代码即可:
<SolidColorBrush Color="{ThemeResource SystemAccentColor}"/>
如果需要的是选中文本的高亮背景色,还可以用更针对性的内置资源键:
<SolidColorBrush Color="{ThemeResource TextSelectionHighlightColor}"/>
ThemeResource的动态更新能力和WPF的DynamicResource在系统颜色调用场景下的表现完全一致,不需要额外编写业务代码。
方案2:通过UISettings API 手动获取和监听
如果内置资源键不满足你的定制需求,可以直接调用WinRT API 读取系统颜色,同时监听颜色变更事件实现动态更新:
- 首先在代码中获取系统颜色:
using Windows.UI.ViewManagement; using Microsoft.UI; using Windows.UI; public Color GetSystemHighlightColor() { var uiSettings = new UISettings(); // 对应系统高亮主题色 return uiSettings.GetColorValue(UIColorType.Accent); }
- 如果需要响应系统颜色实时变更,可以监听
ColorValuesChanged事件:
uiSettings.ColorValuesChanged += (sender, args) => { // 在此处更新对应SolidColorBrush的Color属性即可 YourHighlightBrush.Color = sender.GetColorValue(UIColorType.Accent); };
方案3:全局资源映射
如果项目中有大量需要引用系统颜色的场景,可以在App.xaml的资源字典中定义统一的自定义资源键,初始化时赋值为系统颜色,监听系统颜色变化时统一更新该资源键的值,全局所有引用该键的地方会自动生效。
内容的提问来源于stack exchange,提问作者demonplus
相关产品推荐
相关产品推荐

