mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 23:30:44 +08:00
6.5 KiB
6.5 KiB
Transfer Design Token
Transfer 使用 TransferToken(Token ID: "Transfer")作为组件级 Design Token。所有视觉属性均从全局 SharedToken 派生,不包含硬编码的魔法数字。
Token 资源访问方式
在 AXAML 中引用
<!-- 组件级 Token -->
{atom:TransferTokenResource ListWidth}
{atom:TransferTokenResource ListHeight}
{atom:TransferTokenResource HeaderHeight}
<!-- 全局共享 Token -->
{atom:SharedTokenResource ColorPrimary}
{atom:SharedTokenResource ColorBorder}
{atom:SharedTokenResource BorderRadiusLG}
在 C# 中访问
Token 通过 TransferToken.ScopeProvider 注册到控件的 Token 作用域:
this.RegisterTokenResourceScope(TransferToken.ScopeProvider);
组件级 Token 列表
以下 Token 在 TransferToken 中定义,所有值在 CalculateTokenValues(bool isDarkMode) 中从 SharedToken 派生。
| Token 名称 | 类型 | 计算值 | 说明 |
|---|---|---|---|
ListWidth |
double |
180 |
列表面板默认宽度 |
ListWidthLG |
double |
250 |
启用分页时的列表面板宽度(大号) |
ListHeight |
double |
200 |
列表内容区域默认高度 |
ItemHeight |
double |
SharedToken.ControlHeight |
列表项高度,跟随全局控件高度 |
ItemPadding |
Thickness |
(0, (ControlHeight - FontHeight) / 2) |
列表项纵向内边距,保证文字垂直居中 |
HeaderHeight |
double |
SharedToken.ControlHeightLG |
面板头部信息栏高度 |
HeaderPadding |
Thickness |
(PaddingSM, ceil((ControlHeightLG - LineWidth - FontHeight) / 2)) |
面板头部内边距 |
PaginationMargin |
Thickness |
(0, MarginXXS) |
分页器外边距 |
DataGridSelectionHeaderMargin |
Thickness |
(PaddingXS * 2, 0, 0, 0) |
DataGrid 选择表头外边距(预留) |
引用的全局 SharedToken
Transfer 的主题中广泛引用以下全局 Token,这些 Token 控制了面板的基础视觉样式:
颜色 Token
| SharedToken | 用途 |
|---|---|
ColorBorder |
面板边框颜色 |
ColorSplit |
头部/页脚分割线颜色 |
ColorBgContainer |
头部背景色 |
ColorTextDisabled |
禁用状态文字颜色 |
ColorTextDescription |
搜索框图标颜色 |
ColorError |
Error 状态边框颜色 |
ColorWarning |
Warning 状态边框颜色 |
尺寸与间距 Token
| SharedToken | 用途 |
|---|---|
BorderThickness |
面板边框厚度 |
BorderRadiusLG |
面板圆角半径 |
SpacingXXS |
穿梭按钮之间的间距 |
SpacingXS |
列布局间距 |
MarginXS |
搜索输入框外边距 |
FontSizeIcon |
选择操作下拉菜单图标大小 |
EnableMotion |
是否启用全局动画(绑定到 IsMotionEnabled) |
本地化 Token
| LangToken | 用途 |
|---|---|
TransferLangResource Item |
单数单位文本(如 "项" / "item") |
TransferLangResource Items |
复数单位文本(如 "项" / "items") |
Token 与面板视觉的映射关系
┌─────────────────────────────────────────────────────────────┐
│ TransferItemDecorator │
│ BorderBrush ← SharedToken.ColorBorder │
│ BorderThickness ← SharedToken.BorderThickness │
│ CornerRadius ← SharedToken.BorderRadiusLG │
│ │
│ ┌─ HeaderFrame ─────────────────────────────────────────┐ │
│ │ Height ← TransferToken.HeaderHeight │ │
│ │ Padding ← TransferToken.HeaderPadding │ │
│ │ BorderBrush ← SharedToken.ColorSplit │ │
│ │ Background ← SharedToken.ColorBgContainer │ │
│ │ ┌ SelectAllCheckBox ┐ ┌ SelectedInfo ┐ ┌ Title ┐ │ │
│ └──────────────────────────────────────────────────────── │ │
│ │
│ ┌─ FilterInput ─────────────────────────────────────────┐ │
│ │ Margin ← SharedToken.MarginXS │ │
│ └──────────────────────────────────────────────────────── │ │
│ │
│ ┌─ ContentPresenter ────────────────────────────────────┐ │
│ │ Height ← TransferToken.ListHeight │ │
│ └──────────────────────────────────────────────────────── │ │
│ │
│ ┌─ FooterFrame ─────────────────────────────────────────┐ │
│ │ Padding ← TransferToken.HeaderPadding │ │
│ │ BorderBrush ← SharedToken.ColorSplit │ │
│ └──────────────────────────────────────────────────────── │ │
└─────────────────────────────────────────────────────────────┘
宽度自适应规则
| 条件 | 使用的宽度 Token |
|---|---|
IsStretchView=False 且 IsPaginationEnabled=False |
TransferToken.ListWidth (180) |
IsStretchView=False 且 IsPaginationEnabled=True |
TransferToken.ListWidthLG (250) |
IsStretchView=True |
double.NaN(由父容器决定) |
Token 源码位置
- Token 定义:
src/AtomUI.Desktop.Controls/Transfer/TransferToken.cs - 基类主题引用:
src/AtomUI.Desktop.Controls/Transfer/Themes/AbstractTransferTheme.axaml - 装饰器主题引用:
src/AtomUI.Desktop.Controls/Transfer/Themes/TransferItemDecoratorTheme.axaml