mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-28 23:08:36 +08:00
158 lines
7.0 KiB
Markdown
158 lines
7.0 KiB
Markdown
# Skeleton Design Token
|
||
|
||
Skeleton 控件族使用 `SkeletonToken`(Token ID: `"Skeleton"`)作为组件级 Design Token,所有视觉属性均从全局 `SharedToken` 派生,不硬编码任何具体值。所有 Skeleton 系列控件共享同一套 Token。
|
||
|
||
---
|
||
|
||
## Token 资源访问方式
|
||
|
||
在 AXAML 中使用组件级 Token:
|
||
|
||
```xml
|
||
{atom:SkeletonTokenResource GradientFromColor}
|
||
{atom:SkeletonTokenResource TitleHeight}
|
||
{atom:SkeletonTokenResource BlockRadius}
|
||
{atom:SkeletonTokenResource ParagraphLineHeight}
|
||
{atom:SkeletonTokenResource ImageContainerSize}
|
||
```
|
||
|
||
在 AXAML 中使用全局共享 Token:
|
||
|
||
```xml
|
||
{atom:SharedTokenResource ControlHeight}
|
||
{atom:SharedTokenResource ControlHeightLG}
|
||
{atom:SharedTokenResource ControlHeightSM}
|
||
{atom:SharedTokenResource BorderRadius}
|
||
{atom:SharedTokenResource BorderRadiusSM}
|
||
{atom:SharedTokenResource BorderRadiusLG}
|
||
```
|
||
|
||
---
|
||
|
||
## 组件级 Token 一览
|
||
|
||
以下是 `SkeletonToken` 定义的全部组件级 Token,按功能分组说明。
|
||
|
||
### 颜色 Token
|
||
|
||
| Token 名 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `GradientFromColor` | `Color` | `SharedToken.ColorFillContent` | 骨架块的基底颜色(静态状态和渐变起点色) |
|
||
| `GradientToColor` | `Color` | `SharedToken.ColorFill` | 渐变终点颜色(用于构建流光动画的渐变画刷) |
|
||
|
||
### 流光动画 Token
|
||
|
||
| Token 名 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `LoadingBackgroundStart` | `IBrush` | 基于 `GradientFromColor` + `GradientToColor` 构建 | 流光动画起始帧画刷(`LinearGradientBrush`,起始位置为左) |
|
||
| `LoadingBackgroundMiddle` | `IBrush` | 基于 `GradientFromColor` + `GradientToColor` 构建 | 流光动画中间帧画刷(渐变已扫过一半) |
|
||
| `LoadingBackgroundEnd` | `IBrush` | 基于 `GradientFromColor` 构建 | 流光动画结束帧画刷(回到纯色状态) |
|
||
| `LoadingMotionDuration` | `TimeSpan` | 固定 `1.4s` | 流光动画一次循环的时长 |
|
||
|
||
### 尺寸 Token
|
||
|
||
| Token 名 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `TitleHeight` | `double` | `SharedToken.ControlHeight / 2` | 标题骨架行高度 |
|
||
| `ParagraphLineHeight` | `double` | `SharedToken.ControlHeight / 2` | 段落骨架单行高度 |
|
||
| `BlockRadius` | `CornerRadius` | `SharedToken.BorderRadiusSM` | 骨架块默认圆角(`IsRound=False` 时使用) |
|
||
| `ParagraphLineRoundCornerRadius` | `CornerRadius` | `ParagraphLineHeight / 2` | 段落行胶囊形圆角(`IsRound=True` 时使用) |
|
||
|
||
### 间距 Token
|
||
|
||
| Token 名 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `ParagraphMarginTop` | `Thickness` | `new Thickness(0, SharedToken.UniformlyMarginLG + SharedToken.UniformlyMarginXXS, 0, 0)` | 段落区域顶部间距(标题与段落之间的间隔) |
|
||
| `AvatarMarginRight` | `Thickness` | `new Thickness(0, 0, SharedToken.UniformlyMargin, 0)` | 头像区域右侧间距(头像与内容区域之间的间隔) |
|
||
|
||
### 图片骨架 Token
|
||
|
||
| Token 名 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `ImageSize` | `double` | `SharedToken.ControlHeight × 1.5` | 图片骨架内嵌图标的尺寸 |
|
||
| `ImageContainerSize` | `double` | `SharedToken.ControlHeight × 1.5 × 2` | 图片骨架容器的默认宽高 |
|
||
| `ImageContainerMaxSize` | `double` | `SharedToken.ControlHeight × 1.5 × 4` | 图片骨架容器的最大宽高 |
|
||
|
||
---
|
||
|
||
## 主题中使用的全局 SharedToken
|
||
|
||
除组件级 Token 外,Skeleton 的各 ControlTheme 还直接引用了以下全局 `SharedToken`:
|
||
|
||
| Token 资源键 | 使用场景 | 说明 |
|
||
|---|---|---|
|
||
| `ControlHeight` | 中号高度 | `SkeletonElement`(Middle)、`SkeletonAvatar`(Middle)的高度 |
|
||
| `ControlHeightLG` | 大号高度 | `SkeletonElement`(Large)、`SkeletonAvatar`(Large)的高度 |
|
||
| `ControlHeightSM` | 小号高度 | `SkeletonElement`(Small)、`SkeletonAvatar`(Small)的高度 |
|
||
| `ControlHeightXS` | 段落行间距 | `SkeletonParagraph` 内部 StackPanel 的 `Spacing` |
|
||
| `BorderRadius` | 中号圆角 | `SkeletonAvatar`(Square + Middle)的圆角 |
|
||
| `BorderRadiusSM` | 小号圆角 | `SkeletonElement` 默认圆角、`SkeletonButton`(Square)圆角、`SkeletonImage` 圆角 |
|
||
| `BorderRadiusLG` | 大号圆角 | `SkeletonAvatar`(Square + Large)的圆角 |
|
||
|
||
---
|
||
|
||
## Token 对外观的具体影响
|
||
|
||
### 颜色与动画
|
||
|
||
| 状态 | 视觉效果 | 相关 Token |
|
||
|---|---|---|
|
||
| 静态(`IsActive=False`) | 纯色灰色块 | `GradientFromColor` → `Background` |
|
||
| 流光动画(`IsActive=True`) | 从左到右的渐变流光,三帧循环 | `LoadingBackgroundStart` → `LoadingBackgroundMiddle` → `LoadingBackgroundEnd`,时长 `LoadingMotionDuration` |
|
||
|
||
流光动画通过 Avalonia `Animation` + `KeyFrame` 实现,动画驱动 `AnimationLayerFill` 属性在三个 `LinearGradientBrush` 之间过渡:
|
||
|
||
```
|
||
帧 0(0%): LoadingBackgroundStart ── 渐变在最左侧
|
||
帧 1(80%): LoadingBackgroundMiddle ── 渐变扫过右侧
|
||
帧 2(100%): LoadingBackgroundEnd ── 回到纯色
|
||
```
|
||
|
||
### SizeType 与高度 Token 映射
|
||
|
||
| SizeType | SkeletonElement/SkeletonButton/SkeletonInput 高度 | SkeletonAvatar 宽高 |
|
||
|---|---|---|
|
||
| `Large` | `ControlHeightLG` | `ControlHeightLG` |
|
||
| `Middle` | `ControlHeight` | `ControlHeight` |
|
||
| `Small` | `ControlHeightSM` | `ControlHeightSM` |
|
||
|
||
### IsRound 与圆角 Token 映射
|
||
|
||
| IsRound | 段落行圆角 |
|
||
|---|---|
|
||
| `false`(默认) | `BlockRadius`(`BorderRadiusSM`) |
|
||
| `true` | `ParagraphLineRoundCornerRadius`(`ParagraphLineHeight / 2`,形成胶囊形) |
|
||
|
||
### 组合骨架屏内间距
|
||
|
||
| 区域 | 相关 Token | 效果 |
|
||
|---|---|---|
|
||
| 头像 → 内容 | `AvatarMarginRight` | 头像右侧留白 |
|
||
| 标题 → 段落 | `ParagraphMarginTop` | 段落区域顶部留白(仅 `IsShowTitle=True` 时生效) |
|
||
| 段落行间 | `ControlHeightXS`(共享 Token) | 段落内行与行之间的间距 |
|
||
|
||
---
|
||
|
||
## Token 值参考(默认主题)
|
||
|
||
以下是默认(Light)主题下各 Token 的典型计算值,实际值取决于全局 `SharedToken` 配置:
|
||
|
||
| Token | 默认值(约) | 计算逻辑 |
|
||
|---|---|---|
|
||
| `GradientFromColor` | `rgba(0,0,0,0.06)` | `SharedToken.ColorFillContent` |
|
||
| `GradientToColor` | `rgba(0,0,0,0.15)` | `SharedToken.ColorFill` |
|
||
| `TitleHeight` | `16` px | `ControlHeight / 2` |
|
||
| `ParagraphLineHeight` | `16` px | `ControlHeight / 2` |
|
||
| `BlockRadius` | `4` px | `SharedToken.BorderRadiusSM` |
|
||
| `ParagraphLineRoundCornerRadius` | `8` px | `ParagraphLineHeight / 2` |
|
||
| `ParagraphMarginTop` | `0,28,0,0` | `UniformlyMarginLG + UniformlyMarginXXS` |
|
||
| `AvatarMarginRight` | `0,0,16,0` | `UniformlyMargin` |
|
||
| `LoadingMotionDuration` | `1.4s` | 固定值 |
|
||
| `ImageSize` | `48` px | `ControlHeight × 1.5` |
|
||
| `ImageContainerSize` | `96` px | `ImageSize × 2` |
|
||
| `ImageContainerMaxSize` | `192` px | `ImageSize × 4` |
|
||
| `ControlHeight`(共享) | `32` px | 全局控件高度 |
|
||
| `ControlHeightLG`(共享) | `40` px | 全局大号控件高度 |
|
||
| `ControlHeightSM`(共享) | `24` px | 全局小号控件高度 |
|
||
| `ControlHeightXS`(共享) | `16` px | 全局超小号控件高度 |
|