mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 06:58:57 +08:00
4.9 KiB
4.9 KiB
RadioButton Design Token
RadioButton 控件使用 RadioButtonToken(Token ID: "RadioButton")作为组件级 Design Token,所有视觉属性均从全局 SharedToken 派生,不硬编码任何具体值。
Token 资源访问方式
在 AXAML 中使用组件级 Token:
{atom:RadioButtonTokenResource RadioSize}
{atom:RadioButtonTokenResource DotSize}
{atom:RadioButtonTokenResource TextMargin}
{atom:RadioButtonTokenResource DotColorDisabled}
在 AXAML 中使用全局共享 Token:
{atom:SharedTokenResource ColorPrimary}
{atom:SharedTokenResource ColorBorder}
{atom:SharedTokenResource ColorBgContainer}
{atom:SharedTokenResource BorderThickness}
组件级 Token 一览
以下是 RadioButtonToken 定义的全部组件级 Token,按功能分组说明。
指示器尺寸 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
RadioSize |
double |
SharedToken.FontSizeLG |
单选框圆形指示器的外框大小(宽 = 高 = RadioSize) |
DotSize |
double |
RadioSize - (DotPadding + LineWidth) × 2 |
选中时内部圆点的最终大小(基于 RadioSize 动态计算) |
DotPadding |
double |
固定 4 |
圆点与外框之间的内间距 |
颜色 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
RadioColor |
Color |
SharedToken.ColorWhite |
选中态圆点内部颜色(通常为白色) |
RadioBgColor |
Color |
SharedToken.ColorPrimary |
选中态指示器背景色(主题主色) |
DotColorDisabled |
Color |
SharedToken.ColorTextDisabled |
禁用态选中圆点颜色(灰色) |
间距 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
TextMargin |
Thickness |
SharedToken.UniformlyMarginXS, 0, SharedToken.UniformlyMarginXS, 0 |
文本内容与指示器之间的左右间距 |
主题中使用的全局 SharedToken
除组件级 Token 外,RadioButton 的 ControlTheme 还直接引用了以下全局 SharedToken:
颜色相关
| Token 资源键 | 使用场景 |
|---|---|
ColorText |
单选框文本颜色(正常态) |
ColorTextDisabled |
禁用态文本颜色 |
ColorPrimary |
选中态指示器边框色和背景色 |
ColorBorder |
未选中态指示器边框色;禁用态指示器边框色 |
ColorBgContainer |
未选中态指示器背景色 |
ColorBgContainerDisabled |
禁用态指示器背景色 |
动画相关
| Token 资源键 | 使用场景 |
|---|---|
EnableMotion |
全局动画开关,控制是否启用过渡动画 |
EnableWaveSpirit |
全局波纹开关,控制是否启用选中波纹效果 |
BorderThickness |
指示器默认边框厚度 |
间距相关(RadioButtonGroup 使用)
| Token 资源键 | 使用场景 |
|---|---|
SpacingXS |
RadioButtonGroup 的默认 ItemSpacing 和 LineSpacing 值 |
Token 对外观的具体影响
选中状态与 Token 映射
| 状态 | 指示器背景 | 指示器边框 | 圆点颜色 | 文本颜色 |
|---|---|---|---|---|
| 未选中 | ColorBgContainer |
ColorBorder |
— | ColorText |
| 未选中 + 悬浮 | ColorBgContainer |
ColorPrimary |
— | ColorText |
| 选中 | ColorPrimary |
ColorPrimary |
RadioColor(白色) |
ColorText |
| 禁用(未选中) | ColorBgContainerDisabled |
ColorBorder |
— | ColorTextDisabled |
| 禁用(选中) | ColorBgContainerDisabled |
ColorBorder |
DotColorDisabled(灰色) |
ColorTextDisabled |
指示器尺寸计算逻辑
RadioSize = SharedToken.FontSizeLG
DotPadding = 4 (内间距,固定值)
DotSize = RadioSize - (DotPadding + SharedToken.LineWidth) × 2 (内部圆点直径)
指示器在不同状态下的圆点效果大小(RadioDotEffectSize):
- 选中 + 启用:
DotSize(完整大小) - 选中 + 禁用:
RadioSize - DotPadding × 2(稍大,填充更多区域) - 未选中:
DotSize × 0.6(缩小,动画起始点)
过渡动画与 Token 的关系
RadioIndicator 的过渡动画在 IsMotionEnabled = true 时启用,包括:
| 过渡属性 | 过渡类型 | 持续时间 | 说明 |
|---|---|---|---|
RadioBorderBrush |
SolidColorBrushTransition |
默认 MotionDurationMid |
边框颜色在选中/未选中/悬浮之间平滑切换 |
RadioDotEffectSize |
DoubleTransition |
默认 MotionDurationMid |
圆点大小缩放,产生选中/取消选中的弹性效果 |
RadioBackground |
SolidColorBrushTransition |
MotionDurationFast |
背景色在透明/主色之间快速切换 |
暗色模式适配
Token 值通过 CalculateTokenValues(bool isDarkMode) 在暗色模式下自动适配:
SharedToken.ColorPrimary在暗色模式下为适配暗色背景的主色调SharedToken.ColorBgContainer在暗色模式下为深色背景SharedToken.ColorBorder在暗色模式下为低对比度边框色- 无需额外配置,切换主题时自动响应