Files

148 lines
6.3 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.
# ComboBox Design Token
ComboBox 控件使用 `ComboBoxToken`(Token ID: `"ComboBox"`)作为组件级 Design Token,所有视觉属性均从全局 `SharedToken` 派生,不硬编码任何具体值。
`ComboBoxToken` 继承自 `ButtonSpinnerToken`,后者又继承自 `LineEditToken`,形成三层 Token 继承链:
```
LineEditToken (字体尺寸)
└── ButtonSpinnerToken (操作按钮/手柄样式)
└── ComboBoxToken (下拉列表项样式)
```
---
## Token 资源访问方式
在 AXAML 中使用组件级 Token:
```xml
{atom:ComboBoxTokenResource PopupContentPadding}
{atom:ComboBoxTokenResource ItemColor}
{atom:ComboBoxTokenResource ItemSelectedBgColor}
```
在 AXAML 中使用继承自父类的 Token(通过 ButtonSpinner 作用域访问):
```xml
{atom:ButtonSpinnerTokenResource HandleHoverColor}
{atom:ButtonSpinnerTokenResource HandleBg}
```
在 AXAML 中使用全局共享 Token:
```xml
{atom:SharedTokenResource ColorPrimary}
{atom:SharedTokenResource ControlHeight}
{atom:SharedTokenResource FontSize}
```
---
## 组件级 Token 一览
以下是 `ComboBoxToken` 及其父类定义的全部组件级 Token,按继承层级和功能分组说明。
### ComboBox 专有 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `PopupContentPadding` | `Thickness` | `SharedToken.UniformlyPaddingXXS`, `SharedToken.BorderRadiusLG.TopLeft / 2` | 下拉面板内容区域内边距 |
| `ItemColor` | `Color` | `SharedToken.ColorTextSecondary` | 列表项正常态文字颜色 |
| `ItemHoverColor` | `Color` | `SharedToken.ColorTextSecondary` | 列表项悬浮态文字颜色 |
| `ItemSelectedColor` | `Color` | `SharedToken.ColorText` | 列表项选中态文字颜色 |
| `ItemDisabledColor` | `Color` | `SharedToken.ColorTextDisabled` | 列表项禁用态文字颜色 |
| `ItemBgColor` | `Color` | `SharedToken.ColorBgElevated` | 列表项正常态背景色 |
| `ItemHoverBgColor` | `Color` | `SharedToken.ColorBgTextHover` | 列表项悬浮态背景色 |
| `ItemSelectedBgColor` | `Color` | `SharedToken.ControlItemBgActive` | 列表项选中态背景色 |
| `ItemPadding` | `Thickness` | `SharedToken.UniformlyPaddingSM` | 列表项内间距 |
| `ItemMargin` | `Thickness` | 固定 `(0, 0.5)` | 列表项外边距(上下间距) |
### 继承自 ButtonSpinnerToken(操作手柄相关)
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `ControlWidth` | `double` | 固定 `90` | 控件默认宽度 |
| `HandleWidth` | `double` | `SharedToken.ControlHeightSM` | 操作按钮宽度 |
| `HandleIconSize` | `double` | `SharedToken.FontSize / 2` | 操作按钮图标大小 |
| `HandleBg` | `Color` | `SharedToken.ColorBgContainer` | 操作按钮背景色 |
| `HandleActiveBg` | `Color` | `SharedToken.ColorFillAlter` | 操作按钮激活背景色 |
| `HandleHoverColor` | `Color` | `SharedToken.ColorPrimary` | 操作按钮悬浮文字/图标颜色 |
| `HandleBorderColor` | `Color` | `SharedToken.ColorBorder` | 操作按钮边框颜色 |
| `FilledHandleBg` | `Color` | 基于 `SharedToken.ColorFillSecondary` + `HandleBg` 混合 | 面性变体操作按钮背景色 |
### 继承自 LineEditToken(字体尺寸相关)
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `InputFontSize` | `double` | `SharedToken.FontSize` | 输入区域中号字体大小 |
| `InputFontSizeLG` | `double` | `SharedToken.FontSizeLG` | 输入区域大号字体大小 |
| `InputFontSizeSM` | `double` | `SharedToken.FontSizeSM` | 输入区域小号字体大小 |
---
## 主题中使用的全局 SharedToken
除组件级 Token 外,ComboBox 的 ControlTheme 还直接引用了以下全局 `SharedToken`:
| Token 资源键 | 使用场景 |
|---|---|
| `EnableMotion` | 全局动画开关,控制下拉面板展开/收起动画 |
| `FontSize` / `FontSizeSM` / `FontSizeLG` | 选中内容字体大小(按 `SizeType` 分档) |
| `ControlHeight` | 列表项高度(中号) |
| `IconSizeSM` | 下拉手柄箭头图标尺寸 |
| `SpacingXS` | 内部后缀区域元素间距 |
| `ColorBgElevated` | 下拉面板弹出框背景色 |
| `ColorPrimaryActive` | 下拉手柄按下时的图标颜色 |
| `ColorTextDisabled` | 禁用态选项的文字颜色 |
| `ColorErrorText` | 错误状态下 Borderless/Filled 变体的选中内容前景色 |
| `ColorWarningText` | 警告状态下 Borderless/Filled 变体的选中内容前景色 |
| `BorderRadiusSM` | ComboBoxItem 选项圆角 |
### PopupHost Token(下拉面板外观)
| Token 资源键 | 使用场景 |
|---|---|
| `PopupHostTokenResource MarginToAnchor` | 下拉面板与触发控件之间的间距 |
| `PopupHostTokenResource BoxShadows` | 下拉面板阴影 |
| `PopupHostTokenResource BorderRadius` | 下拉面板圆角 |
---
## Token 对外观的具体影响
### 样式变体与 Token 映射
样式变体(Outlined / Filled / Borderless)的边框/背景样式由 `AddOnDecoratedBox` 统一管理,ComboBox 本身不直接定义这些 Token。但在错误/警告状态下,不同变体的前景色由 ComboBox 主题覆盖:
| 变体 | 错误态前景色 | 警告态前景色 |
|---|---|---|
| `Outlined` | 由 `AddOnDecoratedBox` 管理(边框变红) | 由 `AddOnDecoratedBox` 管理(边框变橙) |
| `Filled` | `ColorErrorText`(选中内容变红) | `ColorWarningText`(选中内容变橙) |
| `Borderless` | `ColorErrorText`(选中内容变红) | `ColorWarningText`(选中内容变橙) |
### ComboBoxItem 状态与 Token 映射
| 选项状态 | 前景色 Token | 背景色 Token | 附加效果 |
|---|---|---|---|
| **正常态** | `ItemColor` | `ItemBgColor` | — |
| **悬浮态** | `ItemHoverColor` | `ItemHoverBgColor` | 背景色带过渡动画 |
| **选中态** | `ItemSelectedColor` | `ItemSelectedBgColor` | `FontWeight = SemiBold` |
| **禁用态** | `ColorTextDisabled` | — | — |
### 尺寸与 Token 映射
| 尺寸 | 控件字体大小 | 选项字体大小 | 控件高度 |
|---|---|---|---|
| `Large` | `FontSizeLG` | `FontSize`(OptionFontSize 默认) | `ControlHeightLG`(由 AddOnDecoratedBox 控制) |
| `Middle` | `FontSize` | `FontSize` | `ControlHeight` |
| `Small` | `FontSizeSM` | `FontSize` | `ControlHeightSM` |
### 下拉手柄与 Token 映射
| 手柄状态 | 图标颜色 |
|---|---|
| **正常态** | 默认图标色 |
| **悬浮态** | `HandleHoverColor`(= `ColorPrimary`) |
| **按下态** | `ColorPrimaryActive` |