WPF UI 主题测试一张表:IThemeService 7 个方法 + 最小注册示例
【免费下载链接】wpfuiWPF UI provides the Fluent experience in your known and loved WPF framework. Intuitive design, themes, navigation and new immersive controls. All natively and effortlessly.项目地址: https://gitcode.com/GitHub_Trending/wp/wpfui
WPF UI 主题测试核心就一件事:用 IThemeService 读取主题、切换主题、设定强调色,全程不碰资源字典。本文先把接口 7 个成员摊成一张表,再给出 DI 容器下跑通主题切换的最少代码,读完你就清楚入口在哪、边界在哪。
IThemeService 方法速查
7 个成员:3 读 4 写。接口源码在 src/Wpf.Ui/IThemeService.cs。
| 方法 | 作用 | 返回/参数类型 |
|---|---|---|
| GetTheme() | 读取当前应用主题 | 返回 ApplicationTheme |
| GetSystemTheme() | 系统主题转库内枚举 | 返回 ApplicationTheme |
| GetNativeSystemTheme() | 系统枚举读系统主题 | 返回 SystemTheme |
| SetTheme(theme) | 切换应用主题 | 参数 ApplicationTheme,返回 bool |
| SetSystemAccent() | 强调色对齐 Windows 系统 | 返回 bool |
| SetAccent(color) | 覆盖应用强调色 | 参数 Color,返回 bool |
| SetAccent(brush) | 重载:传画刷 | 参数 SolidColorBrush,返回 bool |
所有写方法都返回 bool,拿返回值确认主题是否真正落地,失败时资源没有任何变化。
DI 注册:把 ThemeService 注册成单例
单例注册让全局共享同一份主题状态,不必每个视图重复注册。示例工程在 ConfigureServices 里一行搞定:
_ = services.AddSingleton<IThemeService, ThemeService>();切换主题与设置强调色:两行调用
注册后从容器取服务。SetTheme() 立即套上新主题资源,整个应用实时换色;SetAccent() 两个重载,颜色或画刷二选一。参考 示例工程注册位置。
var themeService = App.Services.GetRequiredService<IThemeService>(); themeService.SetTheme(ApplicationTheme.Dark); themeService.SetAccent(Color.FromRgb(0, 120, 212));一行换主题,一行换强调色,效果立即可见。
WPF UI 主题测试的适用与边界
- 想让应用跟随系统深浅色切换时,用 GetSystemTheme() 配合 SystemThemeWatcher 搭监听。
- 设置页放"主题"下拉框时,把每个选项直接绑到 SetTheme(),不写资源字典。
- 强调色要对齐用户选色时,调 SetAccent() 覆盖系统强调色。
边界很明确:主题服务改动全局,只想改一个控件的配色就别用它,直接给该控件设属性。
想动手试,克隆仓库git clone https://gitcode.com/GitHub_Trending/wp/wpfui,samples/Wpf.Ui.Demo.Mvvm 工程里有完整的注册与切换示范。
【免费下载链接】wpfuiWPF UI provides the Fluent experience in your known and loved WPF framework. Intuitive design, themes, navigation and new immersive controls. All natively and effortlessly.项目地址: https://gitcode.com/GitHub_Trending/wp/wpfui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考