Files

115 lines
5.6 KiB
Markdown
Raw Permalink 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.
# GroupBox Design Token
GroupBox 控件使用 `GroupBoxToken`(Token ID: `"GroupBox"`)作为组件级 Design Token,所有视觉属性均从全局 `SharedToken` 派生,不硬编码任何具体值。
---
## Token 资源访问方式
在 AXAML 中使用组件级 Token:
```xml
{atom:GroupBoxTokenResource ContentPadding}
{atom:GroupBoxTokenResource HeaderContainerMargin}
{atom:GroupBoxTokenResource HeaderIconMargin}
{atom:GroupBoxTokenResource HeaderContentPadding}
```
在 AXAML 中使用全局共享 Token:
```xml
{atom:SharedTokenResource ColorBgContainer}
{atom:SharedTokenResource ColorBorder}
{atom:SharedTokenResource BorderThickness}
{atom:SharedTokenResource BorderRadius}
{atom:SharedTokenResource ColorText}
{atom:SharedTokenResource FontSize}
```
---
## 组件级 Token 一览
以下是 `GroupBoxToken` 定义的全部组件级 Token。
### 间距与布局 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `TextPaddingInline` | `double` | 固定 `1.0`(单位 em) | 标题文本的横向内间距,以 em 为单位 |
| `OrientationMarginPercent` | `double` | 固定 `0.05` | 标题与边缘距离的比例,取值 0~1 |
| `VerticalMarginInline` | `double` | `SharedToken.UniformlyMarginXS` | 纵向分割线的横向外间距 |
| `ContentPadding` | `Thickness` | `SharedToken.PaddingXS` | 内容区域内间距(Content 与边框之间的间距) |
| `HeaderContainerMargin` | `Thickness` | `Margin(SharedToken.UniformlyMargin, SharedToken.UniformlyMarginXS, SharedToken.UniformlyMargin, 0)` | 标题区域容器(`PART_HeaderContainer`)的外间距 |
| `HeaderContentPadding` | `Thickness` | `Thickness(SharedToken.UniformlyPaddingXXS, 0)` | 标题内容(`PART_HeaderContent`)的内间距,控制标题文本两侧的留白 |
| `HeaderIconMargin` | `Thickness` | `Thickness(0, 0, SharedToken.UniformlyMarginXXS, 0)` | 标题图标的外间距(控制图标与文本之间的间距) |
---
## 主题中使用的全局 SharedToken
除组件级 Token 外,GroupBox 的 ControlTheme 还直接引用了以下全局 `SharedToken`:
| Token 资源键 | 使用场景 | 说明 |
|---|---|---|
| `ColorBgContainer` | `Background` 属性默认值 | 分组框背景色,同时用于标题遮挡区域的填充色 |
| `ColorBorder` | `BorderBrush` 属性默认值 | 边框颜色 |
| `BorderThickness` | `BorderThickness` 属性默认值 | 边框粗细 |
| `BorderRadius` | `CornerRadius` 属性默认值 | 边框圆角半径 |
| `ColorText` | `HeaderTitleColor` 属性默认值 | 标题文本颜色 |
| `FontSize` | `HeaderFontSize` 属性默认值 | 标题字体大小 |
| `IconSizeLG` | 标题图标的 `Width` / `Height` | 标题图标尺寸(使用大号图标尺寸) |
---
## Token 对外观的具体影响
### 整体视觉
GroupBox 的视觉外观由以下 Token 组合决定:
```
┌─────── HeaderContainerMargin ─────────────────────────────┐
│ ┌── HeaderContentPadding ──┐ │
│ │ [Icon] HeaderTitle Text │ │
│ └──────────────────────────┘ │
│ ↑ HeaderIconMargin │
├─── Border (ColorBorder, BorderThickness, BorderRadius) ───┤
│ │
│ ┌─────── ContentPadding ──────────┐ │
│ │ │ │
│ │ Content Area │ │
│ │ │ │
│ └─────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────┘
Background = ColorBgContainer
```
### Token 与属性的映射关系
| 视觉元素 | 控制 Token | 影响说明 |
|---|---|---|
| 背景色 | `SharedToken.ColorBgContainer` | 整个分组框的背景色,包括标题遮挡区域 |
| 边框色 | `SharedToken.ColorBorder` | 分组框的边框线颜色 |
| 边框粗细 | `SharedToken.BorderThickness` | 边框线的宽度 |
| 圆角 | `SharedToken.BorderRadius` | 边框的圆角半径 |
| 标题文本色 | `SharedToken.ColorText` | 标题文本的默认颜色 |
| 标题字号 | `SharedToken.FontSize` | 标题文本的默认大小 |
| 标题图标大小 | `SharedToken.IconSizeLG` | 标题图标的宽高 |
| 标题图标色 | `SharedToken.ColorText` | 标题图标的填充色(`IconBrush`) |
| 内容区域间距 | `GroupBoxToken.ContentPadding` | Content 与边框之间的留白 |
| 标题区域间距 | `GroupBoxToken.HeaderContainerMargin` | 标题容器距离边框的外间距 |
| 标题内间距 | `GroupBoxToken.HeaderContentPadding` | 标题文本两侧的留白(影响遮挡区域宽度) |
| 图标间距 | `GroupBoxToken.HeaderIconMargin` | 图标与标题文本之间的间距 |
### 主题切换的影响
当在 Light / Dark 主题间切换时:
- `ColorBgContainer` 自动切换为对应主题的容器背景色
- `ColorBorder` 自动切换为对应主题的边框色
- `ColorText` 自动切换为对应主题的文本色
- 标题遮挡区域的填充色随 `Background`(即 `ColorBgContainer`)自动适配
所有这些切换由 Token 系统自动完成,无需手动处理。