You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 读取系统颜色,同时监听颜色变更事件实现动态更新:

  1. 首先在代码中获取系统颜色:
using Windows.UI.ViewManagement;
using Microsoft.UI;
using Windows.UI;

public Color GetSystemHighlightColor()
{
    var uiSettings = new UISettings();
    // 对应系统高亮主题色
    return uiSettings.GetColorValue(UIColorType.Accent);
}
  1. 如果需要响应系统颜色实时变更,可以监听ColorValuesChanged事件:
uiSettings.ColorValuesChanged += (sender, args) =>
{
    // 在此处更新对应SolidColorBrush的Color属性即可
    YourHighlightBrush.Color = sender.GetColorValue(UIColorType.Accent);
};

方案3:全局资源映射

如果项目中有大量需要引用系统颜色的场景,可以在App.xaml的资源字典中定义统一的自定义资源键,初始化时赋值为系统颜色,监听系统颜色变化时统一更新该资源键的值,全局所有引用该键的地方会自动生效。

内容的提问来源于stack exchange,提问作者demonplus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:01