mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-23 17:59:22 +08:00
6.2 KiB
6.2 KiB
Tooltip Design Token
ToolTip 控件使用 ToolTipToken(Token ID: "ToolTip")作为组件级 Design Token,所有视觉属性均从全局 SharedToken 派生,不硬编码任何具体值。
Token 资源访问方式
在 AXAML 中使用组件级 Token:
{atom:ToolTipTokenResource ToolTipBackground}
{atom:ToolTipTokenResource ToolTipColor}
{atom:ToolTipTokenResource ToolTipMaxWidth}
{atom:ToolTipTokenResource ToolTipPadding}
在 AXAML 中使用全局共享 Token:
{atom:SharedTokenResource ColorBgSpotlight}
{atom:SharedTokenResource ColorTextLightSolid}
{atom:SharedTokenResource FontSize}
{atom:SharedTokenResource ControlHeight}
{atom:SharedTokenResource EnableMotion}
组件级 Token 一览
以下是 ToolTipToken 定义的全部组件级 Token,按功能分组说明。
尺寸与布局 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
ToolTipMaxWidth |
double |
固定值 250 |
ToolTip 的最大宽度(像素),超过此宽度文本自动换行 |
ToolTipPadding |
Thickness |
基于 SharedToken.UniformlyPaddingSM 计算 |
ToolTip 内容区域的内间距。水平 = UniformlyPaddingSM,垂直 = UniformlyPaddingSM / 2 + 2 |
颜色 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
ToolTipColor |
Color |
SharedToken.ColorTextLightSolid |
ToolTip 默认前景色(文字颜色),通常为白色 |
ToolTipBackground |
Color |
SharedToken.ColorBgSpotlight |
ToolTip 默认背景色,通常为深灰/黑色半透明 |
圆角 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
BorderRadiusOuter |
CornerRadius |
基于 SharedToken.BorderRadiusSM 计算,最小值 4 |
ToolTip 气泡框的外圆角。每个角的值取 max(原值, 4),确保始终有足够的圆角 |
阴影 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
ToolTipShadows |
BoxShadows |
SharedToken.BoxShadowsSecondary |
ToolTip 气泡框的内置阴影效果,使用全局二级阴影 |
动画 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
ToolTipMotionDuration |
TimeSpan |
SharedToken.MotionDurationMid |
ToolTip 弹出/关闭动画的持续时间 |
主题中使用的全局 SharedToken
除组件级 Token 外,ToolTip 的 ControlTheme 还直接引用了以下全局 SharedToken:
| Token 资源键 | 使用位置 | 说明 |
|---|---|---|
FontSize |
ArrowDecoratedBox 字体 |
ToolTip 内容文字的字号 |
ControlHeight |
ArrowDecoratedBox 最小高度 |
ToolTip 气泡框的最小高度 |
EnableMotion |
IsMotionEnabled 属性 |
全局动画开关,控制 ToolTip 是否使用弹出/关闭动画 |
MarginToAnchor |
MarginToAnchor 属性 |
全局弹出层边距(从 PopupHostToken 获取) |
ColorBgSpotlight |
ToolTipBackground 来源 |
深色聚焦背景色,作为 ToolTip 默认背景 |
ColorTextLightSolid |
ToolTipColor 来源 |
浅色实心文字色,作为 ToolTip 默认前景 |
UniformlyPaddingSM |
ToolTipPadding 来源 |
统一小号内间距,作为 ToolTip 内间距的计算基准 |
BoxShadowsSecondary |
ToolTipShadows 来源 |
二级阴影效果 |
MotionDurationMid |
ToolTipMotionDuration 来源 |
中等动画时长 |
Token 对外观的具体影响
颜色映射
| 模式 | 背景色 | 文字色 | 箭头颜色 |
|---|---|---|---|
| 默认 | ToolTipBackground(ColorBgSpotlight,深灰/黑色) |
ToolTipColor(ColorTextLightSolid,白色) |
与背景色一致 |
预设颜色(PresetColor) |
对应调色板主色 | ToolTipColor(白色) |
与背景色一致 |
自定义颜色(Color) |
用户指定色 | ToolTipColor(白色) |
与背景色一致 |
说明:背景色通过
TemplateBinding Background传递给ArrowDecoratedBox,箭头颜色自动跟随背景色变化。当设置PresetColor或Color时,ToolTip 会更新Background属性,覆盖默认的ToolTipBackgroundToken 值。
尺寸映射
| 属性 | Token 来源 | 默认值(近似) | 说明 |
|---|---|---|---|
| 最大宽度 | ToolTipMaxWidth |
250px |
超过此宽度文本自动换行 |
| 最小高度 | SharedToken.ControlHeight |
32px |
确保 ToolTip 不会太扁 |
| 内间距 | ToolTipPadding |
约 8px 6px |
内容与气泡框边缘的间距 |
| 圆角 | BorderRadiusOuter |
至少 4px |
气泡框的圆角半径 |
阴影映射
| 属性 | Token 来源 | 说明 |
|---|---|---|
| 阴影 | ToolTipShadows |
使用 BoxShadowsSecondary,提供轻微的阴影效果使 ToolTip 与背景分离 |
动画映射
| 属性 | Token 来源 | 说明 |
|---|---|---|
| 弹出动画时长 | ToolTipMotionDuration |
使用 MotionDurationMid(约 200ms),控制淡入淡出速度 |
| 动画开关 | SharedToken.EnableMotion |
全局控制是否使用动画。设为 false 时 ToolTip 立即显示/隐藏 |
深色模式行为
ToolTipToken.CalculateTokenValues(bool isDarkMode) 在深色模式和浅色模式下的行为:
| Token | 浅色模式 | 深色模式 |
|---|---|---|
ToolTipBackground |
ColorBgSpotlight(深色背景) |
ColorBgSpotlight(深色背景) |
ToolTipColor |
ColorTextLightSolid(白色文字) |
ColorTextLightSolid(白色文字) |
ToolTipShadows |
BoxShadowsSecondary |
BoxShadowsSecondary |
注意:ToolTip 在浅色和深色模式下的默认外观非常相似(都是深色背景 + 白色文字),这是因为 Ant Design 的设计规范就是如此——ToolTip 始终使用高对比度的深色气泡,以确保在任何主题下都具有良好的可读性。
Token 注册
ToolTip 控件在构造函数中注册 Token 作用域:
public ToolTip()
{
this.RegisterTokenResourceScope(ToolTipToken.ScopeProvider);
}
ToolTipToken 的 Token 类定义:
[ControlDesignToken]
internal class ToolTipToken : AbstractControlDesignToken
{
public const string ID = "ToolTip";
public static readonly ControlTokenResourceScopeProvider ScopeProvider = new(ID);
// Token 属性...
protected override Type GetTokenKindType() => typeof(ToolTipTokenKind);
}