AtomUI 主题系统架构文档 — 总览
本文档描述 AtomUI 主题系统的整体设计架构。AtomUI 主题系统是对 Ant Design 5.0 Design Token 体系 的 C# / Avalonia 完整移植,实现了与 Ant Design TypeScript 版本功能等价的主题定制能力。
1. 设计背景与目标
1.1 Ant Design 5.0 主题定制体系回顾
Ant Design 5.0 采用了 Design Token 驱动的主题系统,核心理念是:
- Seed Token(种子变量):极少数用户可直接修改的基础设计意图(如品牌主色
colorPrimary、字体大小 fontSize),修改后自动级联派生下层所有 Token。
- Map Token(梯度变量):由 Seed Token 通过 主题算法(Algorithm) 自动派生,形成完整的色彩梯度、尺寸梯度、字体梯度等。
- Alias Token(别名变量):对 Map Token 的语义化封装,面向组件批量消费(如
colorTextDisabled、colorBgContainer)。
- Component Token(组件变量):每个组件独有的 Token,可以从全局 SharedToken 派生,也可以被用户单独覆盖。
- 主题算法:Default(亮色)、Dark(暗色)、Compact(紧凑),算法可自由组合。
Ant Design 在 React 中通过 ConfigProvider 的 theme 属性实现上述能力。AtomUI 在 .NET / Avalonia 平台完整还原了这一设计。
1.2 AtomUI 的对应实现
| Ant Design (TypeScript) |
AtomUI (C#) |
theme.token (Seed/Map/Alias) |
DesignToken (partial class, 三层 Token 定义) |
theme.algorithm |
ThemeAlgorithm enum + IThemeVariantCalculator |
theme.components[Component].token |
AbstractControlDesignToken 子类 |
ConfigProvider |
ThemeConfigProvider (XAML 组件) + XML 主题定义 |
@ant-design/colors (色板生成) |
PaletteGenerator (HSV 色板算法) |
| CSS-in-JS Token 注入 |
Avalonia ResourceDictionary + Token MarkupExtension |
1.3 设计目标
- 完全还原 Ant Design 5.0 Design Token 语义 — 从 Seed → Map → Alias → Component 四层推导链完整实现。
- 主题算法可组合 — Default / Dark / Compact 可任意叠加(装饰器模式)。
- 运行时主题热切换 — 利用 Avalonia
ThemeVariant + ResourceDictionary.ThemeDictionaries 实现零重启切换。
- XML + XAML 双通道配置 — 全局主题通过 XML 定义文件配置,局部嵌套通过 XAML
ThemeConfigProvider 配置。
- 源代码生成器驱动 — Token ResourceKey 枚举通过 Roslyn Source Generator 自动生成,编译期保障类型安全。
- 组件级 Token 隔离 — 每个组件有独立的 Token 作用域,支持组件级别的 SharedToken 覆盖。
2. 整体架构
2.1 系统层次图
2.2 核心模块划分
| 模块 |
目录 |
职责 |
| 主题管理 |
Theme/ 根目录 |
ThemeManager, Theme, ThemeDefinition, Builder 模式 |
| Token 体系 |
Theme/TokenSystem/ |
DesignToken, AbstractControlDesignToken, Token 属性/Attribute |
| Token 定义 |
Theme/TokenSystem/TokenDefinitions/ |
DesignToken partial class 的 Seed/Map/Alias 定义 |
| 主题算法 |
Theme/Styling/ |
IThemeVariantCalculator 及 Default/Dark/Compact 实现 |
| 调色板 |
Theme/Palette/ |
PaletteGenerator, PresetPrimaryColor, PresetPalettes |
| 资源扩展 |
Theme/ (TokenResourceExtension 等) |
XAML MarkupExtension, StyleExtensions |
| Source Generator |
AtomUI.Generator/ (外部项目) |
TokenResourceKeyGenerator 自动生成 Enum 资源键 |
2.3 与 Ant Design TypeScript 版本的对应关系
3. 文档索引
本主题系统文档拆分为以下模块文档:
4. 快速参考:源文件清单
Theme/ 根目录
| 文件 |
职责 |
ITheme.cs |
主题公共接口 |
Theme.cs |
主题实现(加载、构建资源、生命周期) |
IThemeManager.cs |
主题管理器公共接口 |
ThemeManager.cs |
主题管理器实现(主题池、切换、语言、动效开关) |
IThemeManagerBuilder.cs |
构建器接口 |
ThemeManagerBuilder.cs |
构建器实现 |
ThemeAlgorithm.cs |
主题算法枚举(Default, Dark, Compact) |
ThemeDefinition.cs |
主题定义数据模型 |
ThemeDefinitionReader.cs |
XML 主题定义文件解析器 |
ThemeConfigProvider.cs |
XAML 局部主题配置组件 |
IThemeConfigProvider.cs |
局部主题配置接口 |
BaseControlTheme.cs |
控件主题基类 |
IControlThemesProvider.cs |
控件主题提供者接口 |
IThemeAssetPathProvider.cs |
主题资产路径提供者接口 |
ControlTokenResourcesHost.cs |
控件级 Token 资源作用域宿主 |
IControlTokenResourceScopeProvider.cs |
控件级 Token 作用域提供者接口 |
TokenResourceExtension.cs |
泛型 Token 资源 XAML 标记扩展基类 |
TokenSetter.cs |
Token 设置器(用于 XAML 配置) |
ControlTokenInfoSetter.cs |
控件 Token 信息设置器 |
ThemeExceptions.cs |
主题系统异常定义 |
Theme/TokenSystem/
| 文件 |
职责 |
IDesignToken.cs |
Design Token 接口 |
AbstractDesignToken.cs |
Design Token 抽象基类(配置加载、资源构建、Clone) |
IControlDesignToken.cs |
控件 Design Token 接口 |
AbstractControlDesignToken.cs |
控件 Design Token 抽象基类(组件级 Token) |
DesignTokenKind.cs |
Token 分类枚举(Seed, Map, Alias) |
DesignTokenKindAttribute.cs |
Token 分类标注 Attribute |
GlobalDesignTokenAttribute.cs |
全局 Token 标注 Attribute |
ControlDesignTokenAttribute.cs |
控件 Token 标注 Attribute |
NotTokenDefinitionAttribute.cs |
非 Token 属性排除标注 |
ControlTokenConfigInfo.cs |
控件 Token 配置信息 |
ITokenValueConverter.cs |
Token 值转换器接口 |
TokenValueConverterAttribute.cs |
Token 值转换器标注 |
BuiltInTokenValueConverters.cs |
内置 Token 值转换器集合 |
Theme/TokenSystem/TokenDefinitions/
| 文件 |
内容 |
Token 层级 |
DesignToken.cs |
DesignToken 主类(构造、初始化、Alias 计算) |
— |
DesignToken.Seed.cs |
Seed Token 定义 |
Seed |
DesignToken.ColorPrimaryMap.cs |
主色系梯度(1-10号色) |
Map |
DesignToken.ColorSuccessMap.cs |
成功色系梯度 |
Map |
DesignToken.ColorWarningMap.cs |
警戒色系梯度 |
Map |
DesignToken.ColorErrorMap.cs |
错误色系梯度 |
Map |
DesignToken.ColorInfoMap.cs |
信息色系梯度 |
Map |
DesignToken.ColorLinkMap.cs |
链接色系梯度 |
Map |
DesignToken.ColorNeutralMap.cs |
中性色系(文本/边框/填充/背景) |
Map |
DesignToken.ColorMap.cs |
通用颜色(黑/白/遮罩/选区) |
Map |
DesignToken.FontMap.cs |
字体梯度(大小/行高) |
Map |
DesignToken.SizeMap.cs |
尺寸梯度(XXS-XXL) |
Map |
DesignToken.HeightMap.cs |
控件高度梯度 |
Map |
DesignToken.StyleMap.cs |
样式梯度(圆角/线宽/动效时长) |
Map |
DesignToken.Alias.cs |
别名 Token(语义化消费层) |
Alias |
Theme/Styling/
| 文件 |
职责 |
IThemeVariantCalculator.cs |
主题变体计算器接口 |
AbstractThemeVariantCalculator.cs |
计算器抽象基类(装饰器模式) |
DefaultThemeVariantCalculator.cs |
默认(亮色)算法 |
DarkThemeVariantCalculator.cs |
暗色算法 |
CompactThemeVariantCalculator.cs |
紧凑算法 |
IThemeVariantCalculatorFactory.cs |
自定义计算器工厂接口 |
CalculatorUtils.cs |
计算工具(字体/尺寸/圆角/动效时长派生) |
ColorMap.cs |
10 级色阶映射 |
SharedTokenResourceExtension.cs |
全局 Token XAML 标记扩展 |
IControlThemeProvider.cs |
控件主题提供者接口 |
ControlThemeProviderAttribute.cs |
控件主题提供者标注 |
SetterValueFactory.cs |
Setter 值工厂 |
StyleExtensions.cs |
Style 扩展方法 |
Theme/Palette/
| 文件 |
职责 |
PaletteGenerator.cs |
色板生成器(HSV 算法,对标 @ant-design/colors) |
PresetPrimaryColor.cs |
14 种预设主色 |
PresetPalettes.cs |
预计算的亮色/暗色调色板集合 |