# Tour 使用文档
本文档介绍 AtomUI Tour 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TourShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 Tour,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // Tour, TourStep, TourStyleType 等
using AtomUI.Controls; // IMotionAwareControl 等共享类型
```
---
## 1. 基本用法
最基本的 Tour 使用方式:定义目标控件 → 声明 TourStep 步骤 → 通过 `IsOpen` 控制显隐。
```xml
Begin Tour
Upload
Save
```
```csharp
// Code-behind
private void HandleBeginTour(object? sender, RoutedEventArgs args)
{
if (DataContext is MyViewModel vm)
{
vm.TourOpened = !vm.TourOpened;
}
}
```
**要点**:
- `Tour.Steps` 是 Content 属性,`TourStep` 子元素直接写在 `` 内
- `Target` 通过 `{Binding ElementName=...}` 引用页面上的控件
- `IsOpen` 支持双向绑定,Tour 关闭时自动设回 `false`
- 每个步骤可附带 `Cover`(封面图)、`Title`(标题)和 `Description`(描述)
---
## 2. 非模态引导(无遮罩)
设置 `IsShowMask="False"` 可以去除遮罩层,适合不打断用户操作的轻量引导。建议配合 `StyleType="Primary"` 增强引导卡片的醒目度:
```xml
```
---
## 3. 弹出位置
通过 `Placement` 属性控制气泡卡片的弹出方向,支持 13 种位置。当 `Target` 为空时,无论 Placement 设置如何,卡片都会居中显示:
```xml
```
---
## 4. 自定义指示器
### 文字指示器
```xml
```
指示器将显示 "1 / 3"、"2 / 3"、"3 / 3" 格式文本,而非默认的圆点。
---
## 5. 自定义遮罩颜色
Tour 全局遮罩颜色和每个步骤的遮罩颜色都可以单独自定义:
```xml
```
---
## 6. 自定义操作按钮
通过 `Tour.CustomActions` 可以添加自定义按钮(如"跳过"),按钮需实现 `ITourAction` 接口:
```xml
Skip
```
`SkipTourActionButton` 的实现参见 [TourStyling.md](TourStyling.md) 中的自定义操作按钮章节。
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/TourShowCase.axmal.cs` 中的 `SkipTourActionButton` 实现。
---
## 7. 自定义高亮区域
通过 `GapRadius`、`GapOffsetX`、`GapOffsetY` 控制遮罩层镂空区域的形状和偏移:
```xml
```
可以配合 Slider 实时调整参数:
```xml
Radius:
Horizontal offset:
Vertical offset:
```
---
## 8. 封面图(Cover)
每个步骤都支持附带封面图,通过 `Cover` 属性设置(可以是 `Image` 或任意控件),也可通过 `CoverTemplate` 使用数据模板:
```xml
```
---
## 9. MVVM 绑定模式
Tour 的 `IsOpen` 和 `CurrentIndex` 均支持双向绑定,推荐使用 MVVM 模式管理 Tour 状态:
```csharp
// ViewModel(使用 ReactiveUI)
public class TourViewModel : ReactiveObject
{
[Reactive] public bool TourOpened { get; set; }
}
```
```xml
Begin Tour
...
```
当用户完成所有步骤或点击关闭按钮时,Tour 内部会自动将 `IsOpen` 设为 `false`,ViewModel 中的属性也会同步更新。
---
## 常见组合模式
### 新手引导(多步骤 + 遮罩)
```xml
```
### 功能高亮(单步骤 + 无遮罩 + Primary)
```xml
```