Files
ui/docs/prd/epic-1-details-foundation-theme-infrastructure.md
2025-10-15 23:40:13 +08:00

145 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Epic 1 Details: Foundation & Theme Infrastructure
### Epic Goal
建立 Penguin.AvaloniaUI 控件库项目的完整基础设施,实现基于苹果颜色系统的主题框架。该 Epic 交付一个可运行的示例应用,演示浅色和暗色主题的流畅切换,为后续控件开发提供样式和颜色基础。通过该 Epic验证技术栈选择Avalonia、ReactiveUI、Semi.Avalonia的可行性。
---
### Story 1.1: 项目基础设施搭建并初始化示例应用
**As a** 控件库开发者,
**I want** 建立完整的项目结构和依赖配置,并创建一个可运行的示例应用,
**so that** 我可以在稳定的基础设施上开始控件开发,并有一个测试载体来验证功能。
#### Acceptance Criteria
1. 创建 Monorepo 目录结构,包含以下项目:
- `src/Penguin.AvaloniaUI/`(核心控件库,.NET 8 类库)
- `src/Example/`示例应用Avalonia 桌面应用)
- `src/Penguin.AvaloniaUI.Tests/`单元测试项目xUnit
2. 配置 `Penguin.AvaloniaUI` 项目的核心依赖:
- Avalonia 11.x最新稳定版
- Avalonia.ReactiveUI
- Semi.Avalonia如果评估后可用
3. 配置 `Example` 项目引用 `Penguin.AvaloniaUI` 项目
4. Example 应用能够成功启动,显示一个基础窗口,包含:
- 标题:"Penguin.AvaloniaUI Demo"
- 一个 TextBlock 显示 "Hello World"
- 窗口大小800x600
5. 项目能够在 Windows 平台成功编译和运行
6. 创建基础的 `.gitignore``README.md`
7. 快速评估 Semi.Avalonia 的可用性:
- 如果 Semi.Avalonia 可用,在 Example 中应用其基础样式
- 如果不可用或过于复杂,记录决策并准备自定义样式系统
---
### Story 1.2: 实现浅色主题和颜色系统
**As a** 控件库开发者,
**I want** 定义基于苹果颜色系统的语义化颜色,并实现浅色主题,
**so that** 后续开发的控件可以使用一致的颜色语义,且示例应用有专业的视觉呈现。
#### Acceptance Criteria
1.`Penguin.AvaloniaUI/Themes/ColorSystem/` 下创建颜色系统定义:
- 定义语义化颜色资源ResourceDictionary包含至少以下颜色
- Primary主色
- Secondary次要色
- Success成功
- Warning警告
- Error错误
- Background背景
- Surface表面
- TextPrimary主要文本
- TextSecondary次要文本
2.`Penguin.AvaloniaUI/Themes/` 下创建 `LightTheme.axaml`(浅色主题资源字典):
- 为每个语义化颜色定义浅色主题的具体色值
- 确保颜色对比度足够(文本与背景对比度 ≥ 4.5:1
3. 将浅色主题应用到 Example 应用:
-`App.axaml` 中引用 `LightTheme.axaml`
- 示例窗口的背景色使用 `Background` 颜色
- TextBlock 的文本色使用 `TextPrimary` 颜色
4. 在 Example 中添加一个演示页面,展示所有语义化颜色:
- 显示每个颜色的名称和色块(使用 Border 或 Rectangle
- 色块大小:至少 100x50 像素
5. 浅色主题下,示例应用视觉呈现专业、清晰,无明显的配色问题
6.`README.md` 中添加颜色系统的简要说明
---
### Story 1.3: 实现暗色主题
**As a** 控件库开发者,
**I want** 基于颜色系统创建暗色主题,
**so that** 控件库可以支持暗色模式,满足长时间使用场景的需求。
#### Acceptance Criteria
1.`Penguin.AvaloniaUI/Themes/` 下创建 `DarkTheme.axaml`(暗色主题资源字典):
- 为每个语义化颜色定义暗色主题的具体色值
- 确保颜色对比度足够(文本与背景对比度 ≥ 4.5:1
- 暗色主题的背景色应较深(避免纯黑 #000000,推荐深灰色系)
2. 暗色主题的颜色定义应与浅色主题在语义上对应:
- Primary 在两种主题下都表示"强调色",但色值可以不同
- Background 在浅色主题下是浅色,在暗色主题下是深色
3. 修改 Example 应用,支持手动切换到暗色主题:
-`App.axaml` 中暂时保留浅色主题为默认
- 提供注释说明如何切换到暗色主题(修改 `App.axaml` 中的资源引用)
4. 在暗色主题下,颜色演示页面能够正确显示所有暗色主题的颜色
5. 暗色主题视觉呈现舒适,无过度刺眼或过暗的问题
6. 两种主题下的颜色演示页面应使用相同的 XAML 代码(通过语义化颜色资源绑定)
---
### Story 1.4: 实现运行时主题切换
**As a** 示例应用的用户,
**I want** 通过 UI 按钮动态切换浅色和暗色主题,
**so that** 我可以快速验证控件库在不同主题下的视觉效果,无需修改代码和重启应用。
#### Acceptance Criteria
1.`Penguin.AvaloniaUI/Themes/` 下创建 `ThemeManager.cs` 类:
- 提供 `ApplyTheme(ThemeType theme)` 方法,支持动态加载主题资源
- ThemeType 枚举包含 `Light``Dark`
- 主题切换通过替换 `Application.Current.Resources` 中的资源字典实现
2. 提供一个 ReactiveUI Command`SwitchThemeCommand`
- 接受 `ThemeType` 参数
- 调用 `ThemeManager.ApplyTheme()` 切换主题
3. 在 Example 应用的主窗口添加主题切换按钮:
- 两个按钮:"浅色主题" 和 "暗色主题"(或一个 ToggleButton
- 按钮绑定到 `SwitchThemeCommand`
- 按钮样式使用当前主题的颜色系统
4. 主题切换应流畅无闪烁:
- 切换时间 < 100ms符合 NFR4
- 所有使用语义化颜色的控件应自动更新外观
5. 主题切换后,颜色演示页面应立即反映新主题的颜色
6. 主题状态应持久化可选MVP 可以每次启动默认浅色主题)
7. 在 Example 中添加一个简单的测试页面包含多种控件Button、TextBox、CheckBox验证主题切换对不同控件的影响
---