mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 06:58:57 +08:00
5.4 KiB
5.4 KiB
AutoComplete Design Token
AutoComplete 控件使用 AutoCompleteToken(Token ID: "AutoComplete")作为组件级 Design Token,所有视觉属性均从全局 SharedToken 派生,不硬编码任何具体值。
Token 资源访问方式
在 AXAML 中使用组件级 Token:
{atom:AutoCompleteTokenResource OptionHeight}
{atom:AutoCompleteTokenResource PopupContentPadding}
{atom:AutoCompleteTokenResource MinPopupWidth}
{atom:AutoCompleteTokenResource MaxPopupWidth}
在 AXAML 中使用全局共享 Token:
{atom:SharedTokenResource ColorPrimary}
{atom:SharedTokenResource ControlHeight}
{atom:SharedTokenResource ColorBgElevated}
组件级 Token 一览
以下是 AutoCompleteToken 定义的全部组件级 Token。
弹出层 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
PopupContentPadding |
Thickness |
SharedToken.UniformlyPaddingXXS / 2 |
弹出层候选列表的内边距 |
OptionHeight |
double |
SharedToken.ControlHeight |
每个候选选项的高度 |
MinPopupWidth |
double |
固定 120 |
候选列表弹出层的最小宽度 |
MaxPopupWidth |
double |
固定 200 |
在不跟随输入框宽度(IsPopupMatchSelectWidth=False)时的弹出层最大宽度 |
主题中使用的全局 SharedToken
AutoComplete 的 ControlTheme(AbstractAutoCompleteTheme.axaml)直接引用了以下全局 SharedToken:
| Token 资源键 | 使用场景 |
|---|---|
EnableMotion |
全局动画开关,控制弹出/关闭动画是否启用 |
ColorTextPlaceholder |
占位文本颜色 |
ColorBgElevated |
弹出层背景色(浮层提升背景) |
弹出层样式 Token
弹出层框架引用了 PopupHostToken 中的全局 Token:
| Token 资源键 | 使用场景 |
|---|---|
PopupHostToken.MarginToAnchor |
弹出层与锚点(输入框)之间的间距 |
PopupHostToken.BoxShadows |
弹出层阴影效果 |
PopupHostToken.BorderRadius |
弹出层圆角 |
内嵌输入框使用的 Token
AutoComplete 的输入框部分由内嵌的 LineEdit、SearchEdit 或 TextArea 控件渲染,这些控件各自拥有独立的 Token 系统。AutoComplete 通过 TemplateBinding 将以下属性透传给内嵌输入框:
| 透传属性 | 影响 |
|---|---|
SizeType |
内嵌输入框的尺寸,决定高度、字号、圆角等 |
StyleVariant |
内嵌输入框的样式变体(Outline / Filled / Borderless / Underlined) |
Status |
验证状态视觉反馈(Error → 红色边框,Warning → 橙色边框) |
IsAllowClear |
清除按钮显示 |
ClearIcon |
自定义清除图标 |
PlaceholderText |
占位文本 |
IsReadOnly |
只读模式 |
IsMotionEnabled |
动画开关 |
CaretIndex |
光标位置双向绑定 |
因此,AutoComplete 的输入框外观实际由对应输入框控件的 Token(如 LineEditToken、SearchEditToken、TextAreaToken)控制,具体包括:
- 边框颜色:正常态 / 悬浮态 / 焦点态 / 错误态 / 警告态
- 背景色:各变体(Outline / Filled / Borderless / Underlined)的背景
- 字体大小:根据
SizeType由SharedToken.FontSize/FontSizeSM/FontSizeLG决定 - 圆角:根据
SizeType由SharedToken.BorderRadius/BorderRadiusSM/BorderRadiusLG决定 - 高度:根据
SizeType由SharedToken.ControlHeight/ControlHeightSM/ControlHeightLG决定
Token 对外观的具体影响
弹出层外观
| 视觉特征 | Token 来源 | 说明 |
|---|---|---|
| 弹出层背景 | SharedToken.ColorBgElevated |
浮层使用提升背景色,通常比容器背景稍亮 |
| 弹出层圆角 | PopupHostToken.BorderRadius |
统一的弹出层圆角 |
| 弹出层阴影 | PopupHostToken.BoxShadows |
浮层投影效果 |
| 弹出层内边距 | AutoCompleteToken.PopupContentPadding |
候选列表与弹出层边框之间的间距 |
| 弹出层与输入框间距 | PopupHostToken.MarginToAnchor |
候选列表与输入框之间的垂直间距 |
| 弹出层最小宽度 | AutoCompleteToken.MinPopupWidth |
确保弹出层有最小可读宽度 |
| 弹出层最大宽度 | AutoCompleteToken.MaxPopupWidth |
非等宽模式下限制最大宽度 |
候选选项外观
| 视觉特征 | Token 来源 | 说明 |
|---|---|---|
| 选项高度 | AutoCompleteToken.OptionHeight = SharedToken.ControlHeight |
每个候选选项的行高 |
| 选项悬浮背景 | 由 CandidateList 控件的 Token 控制 |
鼠标悬浮时的高亮背景 |
| 选项选中背景 | 由 CandidateList 控件的 Token 控制 |
键盘选中时的高亮背景 |
尺寸与 Token 映射
候选列表的 MaxPopupHeight 由以下公式计算:
MaxPopupHeight = OptionHeight × DisplayCandidateCount + PopupContentPadding.Top + PopupContentPadding.Bottom
其中 OptionHeight 默认等于 SharedToken.ControlHeight,DisplayCandidateCount 默认为 10。
| 尺寸 | 输入框高度 | 选项高度 | 可见候选数 | 弹出层最大高度 |
|---|---|---|---|---|
Large |
ControlHeightLG |
ControlHeight |
10(默认) | 约 ControlHeight × 10 + padding |
Middle |
ControlHeight |
ControlHeight |
10(默认) | 约 ControlHeight × 10 + padding |
Small |
ControlHeightSM |
ControlHeight |
10(默认) | 约 ControlHeight × 10 + padding |
注意:
SizeType仅影响内嵌输入框的尺寸,候选选项的高度始终为ControlHeight,不随SizeType变化。