# Tooltip 自定义样式指南 ToolTip 的视觉表现通过 `ControlTheme` + Design Token 系统控制。以下介绍几种常见的自定义方式。 --- ## 1. 通过附加属性直接控制 最简单的方式是通过 ToolTip 的附加属性来控制外观: ### 基本用法 ```xml Hover me ``` ### 设置弹出方向 ```xml Top Bottom LT ``` ### 箭头控制 ```xml Arrow No Arrow Point at Center ``` ### 预设颜色 ```xml Blue Red Green ``` ### 自定义颜色 ```xml Custom Blue ``` ### 延迟设置 ```xml Instant Delayed ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml` --- ## 2. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 ToolTip 进行全局或局部样式覆盖: ### 全局字体大小 ```xml ``` ### 覆盖内部 ArrowDecoratedBox 样式 ```xml ``` ### ToolTip 打开时的样式 ```xml ``` --- ## 3. 通过 ControlTheme 完全替换主题 如果需要彻底替换 ToolTip 的模板和样式,可以定义自定义 `ControlTheme`: ```xml ``` > ⚠️ 注意:完全替换 ControlTheme 将丢失内置的箭头指示器、阴影效果和动画功能。建议优先使用 Style 覆盖。 --- ## 4. 数据绑定箭头控制 ToolTip 的箭头模式可以通过数据绑定动态切换,Gallery 中的 Arrow 示例展示了这种用法: ```xml Show Hide Center Top ``` ```csharp // ViewModel public class TooltipViewModel : ReactiveObject { private bool _showArrow = true; public bool ShowArrow { get => _showArrow; set => this.RaiseAndSetIfChanged(ref _showArrow, value); } private bool _isPointAtCenter; public bool IsPointAtCenter { get => _isPointAtCenter; set => this.RaiseAndSetIfChanged(ref _isPointAtCenter, value); } } ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TooltipShowCase.axaml` 中 "Arrow" 示例。 --- ## 5. 控制动画行为 ```xml ``` --- ## 6. 程序化控制显示/隐藏 通过 `IsOpen` + `IsCustomShowAndHide` 组合实现程序化控制: ```xml Controlled ``` > ⚠️ 使用程序化控制时**必须**设置 `IsCustomShowAndHide="True"`,否则 `ToolTipService` 会自动管理显示/隐藏,导致 `IsOpen` 绑定被覆盖。 --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|ToolTip` 语法引用 `atom` XML 命名空间下的 `ToolTip` 类型,其中 `|` 是命名空间分隔符。 ### 基本选择器 | 选择器 | 说明 | |---|---| | `atom\|ToolTip` | 匹配所有 AtomUI ToolTip 实例,用于设置全局通用样式 | | `atom\|ToolTip:open` | 匹配已打开的 ToolTip | ### 模板部件选择器 | 选择器 | 说明 | |---|---| | `atom\|ToolTip /template/ atom\|ArrowDecoratedBox#PART_ToolTipContainer` | 访问模板内的箭头装饰盒子,可修改最大宽度、内间距、圆角等 | | `atom\|ToolTip /template/ ContentPresenter#PART_ToolTipContentPresenter` | 访问模板内的内容展示器 | ### 附加属性选择器 由于 ToolTip 通过附加属性使用,要对特定条件下的 ToolTip 进行样式定制,通常需要在目标控件上设置样式: ```xml ```