Files
win_ui_ux_design_skill/SKILL.md
T

113 lines
9.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.
---
name: win-ui-ux-design
description: 为 WinUI 3、Windows App SDK、XAML、Fluent Design,以及使用 PySide 或 PyQt 面向 Windows 的 Qt for Python 应用设计、评审和实现专业的 Windows 桌面端 UI/UX。当任务涉及 Windows 桌面应用外壳或界面、PySide6、PyQt6、PySide2、PyQt5、Qt Widgets、QML、导航与窗口化、标题栏、NavigationView 或框架等价控件选择、响应式 XAML 或 Qt 布局、主题资源、QPalette 或 QSS、Mica 或 Acrylic、HTML 交互原型、客户评审与设计确认、键盘/鼠标/触控交互、无障碍、设计系统规范、UI 审查,或将已确认的设计转换为 WinUI 3、PySide 或 PyQt 代码时使用。
---
# Windows 桌面端 UI/UX 设计
将 Windows 视为以键盘和指针为主、可调整窗口大小、信息密度较高,同时可能接收触控和笔输入的桌面环境。优先采用用户熟悉的平台行为,而不是装饰性的新奇效果。
## 遵循核心规则
- 先优化用户任务流程,再设计单个控件的样式。
- 优先使用所选框架的标准控件、系统资源和内置交互行为,再考虑创建自定义 UI。
- 将键盘、指针、触控、屏幕阅读器、缩放、主题和高对比度视为同一体验,而不是后期适配项。
- 定义每个有意义的状态:默认、悬停、按下、焦点、选中、禁用、加载、空、错误、离线或不可用、成功,以及适用时的撤销。
- 使用语义化 Token 和主题资源。不得只用颜色表达含义,也不得假设浅色模式的配色可直接用于深色模式。
- 保持适合桌面工作的界面密度。不要放大移动端模式,也不要把常用命令隐藏在仅触控手势中。
- 根据项目的框架与绑定版本、目标操作系统、打包模型和依赖项,对每个 API、控件和 Toolkit 建议设置版本门槛。
- 区分 WinUI 3(`Microsoft.UI.Xaml`)与 UWP/WinUI 2(`Windows.UI.Xaml`)。未经验证不得跨框架复制 API。
- 区分 PySide 与 PyQt,以及 Qt Widgets 与 QML。不要在同一应用中混用绑定,也不要把 WinUI 控件名直接写入 Qt 实现。
- 将 HTML 原型视为可交互的设计规格和客户确认媒介,不视为最终桌面实现或原生行为证明。
## 执行工作流
### 1. 确立约束
在提出实现细节前检查项目。确定:
- 框架及其准确的软件包版本;
- 最低 Windows 版本,以及已打包或未打包的部署方式;
- 主要任务、目标用户、本地化、数据密度和无障碍需求;
- 预期窗口尺寸、多窗口行为,以及调整大小和贴靠场景;
- 主要输入方式,以及是否需要针对触控优化;
- 品牌约束、浅色/深色行为和现有设计 Token。
- 客户确认范围、原型保真度、交付方式、审批人和变更流程。
如果信息缺失,明确说明保守假设,并让版本敏感的建议保持条件化。
### 2. 选择框架路线
先根据实际依赖选择且只选择一条实现路线:
- **WinUI 3:** 使用 `Microsoft.UI.Xaml`,并读取 [controls-and-patterns.md](references/controls-and-patterns.md) 与 [engineering-validation.md](references/engineering-validation.md)。
- **PySide/PyQt:** 确认 PySide6、PyQt6 或遗留 Qt 5 绑定,再确定 Qt Widgets 或 QML;读取 [qt-pyside-pyqt.md](references/qt-pyside-pyqt.md),不要生成 XAML 或 WinUI API。
两条路线都必须读取 Windows 视觉基础与输入/无障碍基线。框架未知时先检查项目文件和导入语句,不要同时给出两套混杂实现。
### 3. 建模体验
定义主要用户任务、信息层级、窗口图、导航模型和命令界面。保持顶级导航浅而清晰。确定哪些工作应放在主窗口、辅助窗口、内联界面、浮出控件或模态对话框中。
先描述顺利路径和恢复路径,再制作原型或所选框架的界面代码。在导航、调整大小、刷新和错误发生时保留用户上下文。
### 4. 定义视觉系统
为字体、间距、几何、颜色、层级、材质、图标和动效建立精简的语义系统。除非品牌需要有意偏离,否则使用 Windows 默认规范。阅读 [windows-foundations.md](references/windows-foundations.md),了解当前 Fluent 原则、响应式断点、主题、材质和动效指南。
### 5. 将意图映射到控件和模式
根据交互语义选择控件,而不是根据外观或任意的项目数量阈值。跨菜单、工具栏、上下文菜单和快捷键复用命令。WinUI 项目读取 [controls-and-patterns.md](references/controls-and-patterns.md);PySide/PyQt 项目读取 [qt-pyside-pyqt.md](references/qt-pyside-pyqt.md) 中的 Qt 控件映射。
### 6. 规定交互与无障碍
记录焦点顺序、方向键行为、访问键、快捷键、指针提示、上下文菜单、触控目标、拖拽替代方式、无障碍名称、状态播报、对比度和缩放。阅读 [input-accessibility.md](references/input-accessibility.md),了解必需的交互与无障碍基线。该参考中的 `AutomationProperties` 仅适用于 WinUI;PySide/PyQt 项目必须使用 [qt-pyside-pyqt.md](references/qt-pyside-pyqt.md) 中的 Qt Accessibility 映射。
### 7. 制作 HTML 原型并取得确认
对于新产品、主要页面或显著改版,在正式桌面实现前制作可本地运行的 HTML/CSS/JavaScript 交互原型。它必须复用已定义的 Token、内容、状态矩阵和窗口断点,覆盖主流程、关键异常和空/加载/禁用状态,而不接入生产后端。
向客户明确浏览器与 WinUI/Qt 在原生控件、窗口管理、字体渲染、系统材质、DPI、无障碍和性能上的差异。以书面验收清单确认信息架构、布局、视觉、文案、流程和状态;记录未确认项与不在原型验收范围内的原生能力。只有确认后才进入桌面实现。小型局部修改可说明理由后跳过此门禁。
制作或评审原型时读取 [html-prototype-handoff.md](references/html-prototype-handoff.md),并在交接时建立 HTML 组件到 WinUI 或 Qt 控件的映射。客户要求改变已确认设计时,先更新原型和验收记录,再修改桌面实现。
### 8. 工程实现与验证
请求实现时,遵循现有架构,并集中管理 Token、命令和状态。保留虚拟化,避免在 UI 线程上执行同步工作。WinUI 项目读取 [engineering-validation.md](references/engineering-validation.md);PySide/PyQt 项目读取 [qt-pyside-pyqt.md](references/qt-pyside-pyqt.md) 中的 Qt 工程、线程、主题、部署和测试规范。
在真实的紧凑、中等和宽窗口宽度下验证结果,而不是只在全屏显示器分辨率下验证。
## 产出可用于决策的结果
对于新设计,提供:
1. 假设和目标场景;
2. 信息架构与窗口/导航模型;
3. 带响应式行为说明的标注布局;
4. 控件和命令映射;
5. 语义化视觉 Token;
6. 交互与状态矩阵;
7. 无障碍要求;
8. 实现说明和验收检查。
9. 需要客户确认时,提供可运行的 HTML 原型、确认清单和桌面控件映射。
对于评审,先按严重程度列出发现。每项发现都要指出受影响的界面或控件、用户影响、违反的 Windows 约定和具体修正方案。将正确性与无障碍缺陷同主观的视觉润色建议分开。
对于实现,只修改请求范围,复用项目现有模式,构建或运行相关检查,并报告任何仍未验证的 API 或版本假设。
## 拒绝常见失败模式
- 不要把过时的 UWP 或已归档 Toolkit API 当作当前 WinUI 3 指南。
- 不要推荐使用 `ComboBox` 进行多选;它不支持多选。
- 不要假设当前 WinUI 3 项目中存在已归档的 Windows Community Toolkit `DataGrid`。
- 不要把 Emoji 用作结构性界面图标;使用平台字形或一致的矢量图标集。
- 不要强制在所有表面使用 Acrylic。用材质表达层级,并提供可读的纯色回退方案。
- WinUI 标准控件已经公开准确的无障碍名称时,不要强制设置 `AutomationProperties.Name`;Qt 项目使用对应的 Qt Accessibility API,并且只在缺少语义时显式添加名称。
- 不要默认确认每次删除。对频繁且可恢复的操作优先提供撤销;仅对代价高或不可逆的后果使用模态确认。
- 不要把单一窗口尺寸、主题、DPI、区域设置或输入方式硬编码为设计基线。
- 不要在一个进程中混用 PySide 与 PyQt,也不要混用绑定特有的 `Signal`/`Slot` 与 `pyqtSignal`/`pyqtSlot` API。
- 不要从工作线程直接读取或修改 `QWidget`、Qt Quick 场景或其他 GUI 对象;通过队列信号把数据结果送回 GUI 线程。
- 不要把 QSS 当作完整 CSS,也不要让全局样式表覆盖系统主题、高对比度、焦点和禁用状态。
- 不要把 HTML 原型的 DOM、CSS 或 Web 组件逐字移植为 WinUI/Qt 控件,也不要承诺浏览器原型能证明原生窗口行为、性能或无障碍结果。
- 不要为了原型接入生产数据库、真实凭据或不可逆操作;默认使用可重置的模拟数据和本地交互。