# 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
```