Files
win_ui_ux_design_skill/references/windows-foundations.md
T
2026-07-18 17:40:25 +08:00

130 lines
7.5 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.
# Windows 视觉与布局基础
## 目录
1. 设计原则
2. 视觉基础
3. 布局与响应式行为
4. 颜色与主题
5. 材质与层级
6. 字体、图标与动效
7. 基础规范检查清单
8. 官方资料
## 1. 设计原则
将当前 Windows 11 设计原则作为评估问题:
| 原则 | 评估问题 |
|---|---|
| Effortless(轻松) | 用户能否专注、准确且无需过多理解就完成主要任务? |
| Calm(平静) | 次要界面元素是否足够克制,让内容和当前工作占据主导? |
| Personal(个性化) | 应用是否尊重主题、强调色、文本大小、输入方式和用户偏好? |
| Familiar(熟悉) | 导航、命令、选择、窗口化和反馈是否符合 Windows 行为? |
| Complete + Coherent(完整且一致) | 界面、窗口、状态和输入方式是否形成统一系统? |
不要用早期 Fluent 中的 Light、Depth、Motion、Material 和 Scale 词汇替代这五项产品原则。将颜色、层级、图标、材质、几何、字体和动效视为视觉基础。
## 2. 视觉基础
建立语义化 Token 层,不要单独设置每个界面的样式:
- `surface.base`、`surface.layer`、`surface.overlay`;
- `text.primary`、`text.secondary`、`text.disabled`;
- `accent.default`、`accent.hover`、`accent.pressed`、`accent.disabled`;
- `status.success`、`status.caution`、`status.critical`、`status.informational`;
- `stroke.control`、`stroke.divider`、`focus.stroke`;
- `space.1` 到 `space.n`、`radius.control`、`radius.overlay`;
- `motion.fast`、`motion.normal` 和共享缓动 Token。
在有对应资源时,将这些语义映射到 WinUI 主题资源。让品牌 Token 位于平台 Token 之上,明确浅色、深色和高对比度映射。
每个局部任务区域只使用一个主要强调操作。先通过尺寸、间距、对齐和字重建立层级,再增加颜色或表面。
## 3. 布局与响应式行为
使用有效像素(epx)进行设计。尺寸、边距和位置在可行时使用 4 epx 的倍数;文本大小不受该网格限制。
以当前 Windows 宽度类别为起点,仅在内容证明有实际需要时调整:
| 类别 | 有效宽度 | 典型响应方式 |
|---|---:|---|
| 小 | `<= 640` | 单窗格、折叠或最小化导航、堆叠表单、延后显示次要内容 |
| 中 | `641–1007` | 紧凑导航、列表/详情可在单窗格和双窗格间切换 |
| 大 | `>= 1008` | 在有助于任务时使用常驻导航或多窗格工作区 |
使用实际内容区域或窗口宽度,而不是显示器分辨率。在应用支持的最小尺寸、Windows 贴靠宽度、还原窗口、最大化窗口以及跨显示缩放变化时进行验证。
有意识地应用响应式技术:
- **重排(Reflow):** 在不改变含义的情况下换行或堆叠内容。
- **调整大小(Resize):** 让弹性区域吸收空间,并限制文本的可读行宽。
- **重新定位(Reposition):** 移动次要面板或命令,同时保持顺序。
- **显示(Reveal):** 随可用空间增加,逐步展示低优先级内容。
- **替换(Replace):** 切换为更适合的导航或展示控件。
- **重构(Re-architect):** 仅当紧凑窗口无法支持相同结构时改用不同工作流。
将窄屏状态定义为安全默认状态,再使用 `VisualStateManager` 和 `AdaptiveTrigger` 添加宽屏状态。当 `NavigationView` 的紧凑/展开窗格宽度等控件阈值能表达预期行为时,优先使用这些阈值。避免给需要本地化或缩放的内容设置固定宽度。
## 4. 颜色与主题
- 对必须随主题运行时更新的颜色和画刷使用 `{ThemeResource ...}`。
- 分别测试浅色、深色和高对比度;不要通过反相生成深色模式。
- 尊重系统强调色,除非产品标识或领域语义足以证明需要受控的品牌强调色。
- 普通文本至少保持 4.5:1 对比度。除语义色外,同时使用图标、文本或图案。
- 不要只通过降低不透明度表达状态。保持文本、焦点、选择和禁用语义可辨认。
- 不要把关键文本放在无法确定可读性的材质或图像上,必须提供明确可读的回退方案。
优先使用文本填充、控件填充、描边、强调色填充和系统状态画刷等系统资源。生成代码前,根据项目的 Windows App SDK 版本验证资源名称。
## 5. 材质与层级
使用材质来明确层级,不要装饰每个容器:
| 需求 | 首选机制 | 说明 |
|---|---|---|
| 主窗口背景 | `MicaBackdrop` | 用于 Windows 11;在 Windows 10 回退为纯色 |
| 可透视桌面的窗口 | `DesktopAcrylicBackdrop` | 视觉更活跃;仅在体验确有收益时使用 |
| 特定区域的材质 | `SystemBackdropElement` | 需要 Windows App SDK 1.6.3 或更高版本 |
| 模糊窗口内部内容 | 应用内 `AcrylicBrush` | 不会显示应用背后的桌面 |
| 简单内容表面 | 主题纯色 | 通常是最清晰且成本最低的选择 |
不要在 WinUI 3 中使用 UWP `HostBackdrop` 模式。透明效果关闭、硬件不足、节电模式抑制 Acrylic、使用远程桌面或启用高对比度时,允许系统自动回退。确保回退颜色仍能维持层级和对比度。
仅用层级表达重叠、焦点或临时 UI。优先使用系统阴影和覆盖层行为。不要仅为了让卡片显得凸起而引入外部阴影控件。
## 6. 字体、图标与动效
默认使用 Segoe UI Variable 和 WinUI 字体层级。复用平台文本样式,不要在整个 XAML 中重复数值字号。正文使用常规字重,标题或标签使用更强字重,对齐的数字数据使用等宽数字,并优先换行而不是截断。无法避免截断时,通过无障碍工具提示或详情界面公开完整值。
使用 `SymbolIcon`、搭配 Segoe Fluent Icons 的 `FontIcon`,或一致的矢量资源集。保持图标隐喻、大小、描边/填充风格和对齐一致。为不熟悉或仅有图标的命令提供无障碍名称和工具提示。不要使用 Emoji 作为导航或命令图标。
使用动效解释因果关系、层级和连续性:
- 立即提供指针/按下反馈;
- 在有助于解释移动时,优先使用平台过渡和连接动画;
- 为不透明度和变换等适合合成器的属性设置动画;
- 保持动画可中断,绝不使用动画延迟输入;
- 当系统动画设置要求时,减少或移除非必要动效;
- 避免在生产力界面中使用持续循环的装饰性动效。
## 7. 基础规范检查清单
- [ ] UI 体现 Effortless、Calm、Personal、Familiar 和 Complete + Coherent。
- [ ] 语义 Token 覆盖主题和所有交互状态。
- [ ] 布局已在紧凑、中等、宽、贴靠和缩放条件下验证。
- [ ] 间距和几何遵循一致的 4 epx 节奏。
- [ ] 材质选择能表达层级并具有纯色回退方案。
- [ ] 字体在文本缩放和本地化后仍可读。
- [ ] 图标采用统一语言且不使用 Emoji。
- [ ] 动效能传达变化并尊重用户设置。
## 8. 官方资料
- [Windows 设计原则](https://learn.microsoft.com/windows/apps/design/design-principles)
- [Windows 设计指南](https://learn.microsoft.com/windows/apps/design/guidelines-overview)
- [屏幕尺寸与断点](https://learn.microsoft.com/windows/apps/design/layout/screen-sizes-and-breakpoints-for-responsive-design)
- [内容布局与间距](https://learn.microsoft.com/windows/apps/design/basics/content-basics)
- [Windows 应用中的材质](https://learn.microsoft.com/windows/apps/develop/ui/materials)
- [无障碍文本要求](https://learn.microsoft.com/windows/apps/design/accessibility/accessible-text-requirements)