用途:在 WPF 项目中系统化管理 Style 与 ResourceDictionary,实现一致的 UI 与可维护的主题体系。
主要能力:
- 样式定义:显式样式(带 x:Key,需按 key 引用)与隐式样式(无 key,自动应用于该类型控件)。
- 样式继承:通过 BasedOn 复用基础样式,可继承显式样式,也可用 BasedOn="{StaticResource {x:Type Button}}" 继承隐式样式。
- 资源字典组织:按职责拆分 Colors.xaml、Brushes.xaml、Converters.xaml、Controls/Button.xaml 等,再由 Generic.xaml 按依赖顺序合并,最后在 App.xaml 中加载。
- 资源引用选择:StaticResource 在 XAML 加载时求值一次、性能好、不反映变更;DynamicResource 运行时求值、可自动反映变更、支持前向引用,适合主题切换。
- 主题切换:ThemeService 通过移除旧主题字典、添加新主题字典实现明暗主题切换。
- 代码访问资源:FindResource(找不到抛异常)、TryFindResource(找不到返回 null)、SetResourceReference 设置动态资源。
- 外部库资源:用 ComponentResourceKey 暴露资源,供使用方通过 x:Static 引用。
- 资源查找顺序:元素自身资源、父级资源、Window/Page 资源、Application.Resources、主题资源(Generic.xaml)、系统资源。
使用方式:按上述文件结构组织 Themes 目录,在 Generic.xaml 中按依赖顺序合并各字典,并在 App.xaml 的 Application.Resources 中加载;固定资源用 StaticResource,需运行时变更的资源用 DynamicResource。
适用场景:构建主题系统、组织控件样式、开发可复用控件库。
限制:资料未提供具体安装命令、收费方式、平台支持范围及性能基准数据。