# HyperLinkButton 自定义样式指南 HyperLinkButton 的视觉表现通过 `ControlTheme` + Design Token 系统控制。它复用 `ButtonToken` 作用域中的间距和字体 Token,颜色使用 `SharedToken` 中的链接色系(`ColorLink` / `ColorError`)。 --- ## 1. 使用属性直接控制 最简单的方式是通过 HyperLinkButton 的公共属性来控制外观: ```xml Visit AtomUI Open Link Delete Account Large Link Small Link Loading... ``` > 📖 实际使用参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/AboutUsPage.axaml` --- ## 2. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 HyperLinkButton 进行全局或局部样式覆盖: ### 统一链接样式 ```xml ``` ### 已访问状态的视觉区分 ```xml ``` ### 自定义危险链接的悬浮效果 ```xml ``` ### 自定义模板内部元素 ```xml ``` --- ## 3. 颜色体系 HyperLinkButton 使用链接色系,与 Button 的颜色体系完全不同。不同状态下的颜色映射: ### 默认链接 | 状态 | 前景色 | 图标色 | 背景色 | |---|---|---|---| | 正常 | `ColorLink` | `ColorLink` | 透明 | | 悬浮(`:pointerover`) | `ColorLinkHover` | `ColorLinkHover` | 透明 | | 按下(`:pressed`) | `ColorLinkActive` | `ColorLinkActive` | 透明 | | 禁用(`:disabled`) | `ColorTextDisabled` | `ColorTextDisabled` | 透明 | ### 危险链接(`:danger`) | 状态 | 前景色 | 图标色 | 背景色 | |---|---|---|---| | 正常 | `ColorError` | `ColorError` | 透明 | | 悬浮(`:pointerover`) | `ColorErrorHover` | `ColorErrorHover` | 透明 | | 按下(`:pressed`) | `ColorErrorActive` | `ColorErrorActive` | 透明 | | 禁用(`:disabled`) | `ColorTextDisabled` | `ColorTextDisabled` | 透明 | --- ## 4. 通过 ControlTheme 完全替换主题 ```xml Custom Link ``` > ⚠️ 注意:完全替换 ControlTheme 将丢失内置的加载图标切换、图标间距适配等功能。建议优先使用 Style 覆盖。 --- ## 5. 控制动画行为 ```xml No Animation ``` --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|HyperLinkButton` 语法引用 `atom` XML 命名空间下的 `HyperLinkButton` 类型,其中 `|` 是命名空间分隔符。 ### 按控件类型选择 | 选择器 | 说明 | |---|---| | `atom\|HyperLinkButton` | 匹配所有 HyperLinkButton 实例 | ### 按属性选择 | 选择器 | 说明 | |---|---| | `atom\|HyperLinkButton[SizeType=Large]` | 匹配大号链接按钮 | | `atom\|HyperLinkButton[SizeType=Small]` | 匹配小号链接按钮 | | `atom\|HyperLinkButton[IsDanger=True]` | 匹配危险链接按钮 | | `atom\|HyperLinkButton[IsGhost=True]` | 匹配幽灵链接按钮 | ### 按伪类选择 | 选择器 | 说明 | |---|---| | `atom\|HyperLinkButton:visited` | 已访问状态(`IsVisited == true`) | | `atom\|HyperLinkButton:icononly` | 仅图标模式(`Icon` 不为 null 且 `Content` 为 null) | | `atom\|HyperLinkButton:loading` | 加载中状态(`IsLoading == true`) | | `atom\|HyperLinkButton:danger` | 危险样式(`IsDanger == true`) | | `atom\|HyperLinkButton:pointerover` | 鼠标悬浮 | | `atom\|HyperLinkButton:pressed` | 按下 | | `atom\|HyperLinkButton:disabled` | 禁用(`IsEnabled == false`) | ### 模板部件选择器 | 选择器 | 说明 | |---|---| | `atom\|HyperLinkButton /template/ Border#Frame` | 主框架 Border | | `atom\|HyperLinkButton /template/ StackPanel#PART_MainInfoLayout` | 内容布局面板 | | `atom\|HyperLinkButton /template/ atom\|IconPresenter#PART_ButtonIcon` | 按钮图标展示器 | | `atom\|HyperLinkButton /template/ atom\|Icon#PART_LoadingIcon` | 加载旋转图标 | | `atom\|HyperLinkButton /template/ ContentPresenter#PART_ContentPresenter` | 内容展示器 | ### 组合选择器示例 | 选择器 | 说明 | |---|---| | `atom\|HyperLinkButton:not(:disabled)` | 非禁用状态的链接按钮 | | `atom\|HyperLinkButton:danger:not(:disabled):pointerover` | 悬浮状态的非禁用危险链接 | | `atom\|HyperLinkButton:visited:not(:danger)` | 已访问但非危险的链接 | | `atom\|HyperLinkButton[SizeType=Large]:icononly` | 大号仅图标链接按钮 |