Files
AtomUI/docs/Desktop.Controls/ToggleIconButton/ToggleIconButtonToken.md
T

111 lines
4.1 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.
# ToggleIconButton Design Token
ToggleIconButton 复用 `ButtonToken`(Token ID: `"Button"`)作为组件级 Design Token 作用域。它本身不定义独立的组件级 Token,而是直接使用 `SharedToken` 中的图标色系和尺寸 Token 来控制视觉表现。
---
## Token 作用域
ToggleIconButton 在构造函数中注册了 `ButtonToken.ScopeProvider`:
```csharp
public class ToggleIconButton : AbstractToggleIconButton
{
public ToggleIconButton()
{
this.RegisterTokenResourceScope(ButtonToken.ScopeProvider);
}
}
```
这意味着 ToggleIconButton 可以访问 `ButtonToken` 中定义的所有组件级 Token,但其主题模板(`ToggleIconButtonTheme.axaml`)实际上主要使用的是全局 `SharedToken`。
---
## Token 资源访问方式
在 AXAML 中使用全局共享 Token:
```xml
{atom:SharedTokenResource ColorIcon}
{atom:SharedTokenResource ColorIconHover}
{atom:SharedTokenResource ColorText}
{atom:SharedTokenResource ColorTextDisabled}
{atom:SharedTokenResource IconSizeSM}
{atom:SharedTokenResource BorderRadiusSM}
{atom:SharedTokenResource EnableMotion}
```
在 AXAML 中使用 ButtonToken 组件级 Token(可选):
```xml
{atom:TokenResource PrimaryColor}
{atom:TokenResource DefaultColor}
```
---
## 主题中使用的全局 SharedToken
以下是 ToggleIconButton 的 ControlTheme 直接引用的全部 `SharedToken`:
### 图标颜色 Token
| Token 资源键 | 类型 | 使用场景 | 说明 |
|---|---|---|---|
| `ColorIcon` | `Color` | 正常态(默认)图标颜色 | 未选中且无交互时的图标色 |
| `ColorIconHover` | `Color` | 悬浮态图标颜色 | 鼠标悬浮时的图标色,比正常态略深 |
| `ColorText` | `Color` | 按下态图标颜色 | 鼠标按下时的图标色,视觉反馈最强 |
| `ColorTextDisabled` | `Color` | 禁用态图标颜色 | 灰色调,表示不可交互 |
### 尺寸 Token
| Token 资源键 | 类型 | 使用场景 | 说明 |
|---|---|---|---|
| `IconSizeSM` | `double` | 默认图标宽度/高度 | 小号图标尺寸,适合纯图标按钮的紧凑场景 |
| `BorderRadiusSM` | `CornerRadius` | 圆角半径 | 小号圆角,与小号图标尺寸视觉协调 |
### 动画 Token
| Token 资源键 | 类型 | 使用场景 | 说明 |
|---|---|---|---|
| `EnableMotion` | `bool` | 全局动画开关 | 控制 `IsMotionEnabled` 的默认值 |
---
## Token 对外观的具体影响
### 状态与 Token 映射
ToggleIconButton 的主题通过伪类选择器将不同状态映射到不同的 Token 颜色:
| 状态 | 伪类 | `IconBrush` 来源 | 视觉效果 |
|---|---|---|---|
| **正常态** | 无特殊伪类 | `ColorIcon` | 中灰色图标,低调不抢眼 |
| **悬浮态** | `:pointerover` | `ColorIconHover` | 稍深的灰色,提示可交互 |
| **按下态** | `:pressed` | `ColorText` | 最深色(通常接近黑色),强反馈 |
| **禁用态** | `:disabled` | `ColorTextDisabled` | 浅灰色,明确表示不可用 |
### 颜色属性覆盖机制
当用户通过属性显式设置颜色时,这些属性值优先于主题默认的 Token 颜色:
| 用户属性 | 覆盖的状态 | 对应的默认 Token |
|---|---|---|
| `NormalIconBrush` | 未选中正常态 | `ColorIcon` |
| `ActiveIconBrush` | 悬浮态 + 按下态 | `ColorIconHover` / `ColorText` |
| `SelectedIconBrush` | 选中态 | `ColorIcon` |
| `DisabledIconBrush` | 禁用态 | `ColorTextDisabled` |
### 尺寸与 Token 映射
| 维度 | Token | 默认值(Default 主题) | 说明 |
|---|---|---|---|
| 图标宽度 | `IconSizeSM` | 12px | 通过 `IconWidth` 属性覆盖 |
| 图标高度 | `IconSizeSM` | 12px | 通过 `IconHeight` 属性覆盖 |
| 圆角 | `BorderRadiusSM` | 4px | 背景框圆角 |
### 与 Button Token 的关系
虽然 ToggleIconButton 注册了 `ButtonToken.ScopeProvider`,但其主题实际未使用 ButtonToken 中的专有 Token(如 `PrimaryColor`、`DefaultBg`、`Padding` 等)。这是因为 ToggleIconButton 是纯图标控件,不需要 Button 复杂的颜色方案和内间距体系。注册 ButtonToken 作用域主要是为了保持架构一致性,并为未来可能的扩展预留空间。