# HyperLinkButton 使用文档
本文档介绍 AtomUI HyperLinkButton 控件的各种使用方式。
> 📖 Gallery 中使用了 HyperLinkButton 的页面:
> - `controlgallery/AtomUIGallery/ShowCases/Views/General/AboutUsPage.axaml`(带图标的导航链接)
> - `controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/CardShowCase.axaml`(Card 中的 "More" 链接)
> - `controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/FormShowCase.axaml`(表单中的 "Forgot password" 链接)
---
## 前置准备
在 AXAML 中使用 HyperLinkButton,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // HyperLinkButton 控件
using AtomUI.Controls; // SizeType 等共享类型
```
---
## 1. 基本用法
最基本的超链接按钮,点击后在浏览器中打开链接:
```xml
Visit AtomUI
```
**要点**:
- 设置 `NavigateUri` 后,点击会自动调用系统浏览器打开链接
- 导航成功后,`IsVisited` 自动变为 `true`
- 支持任意 URI 格式(`https://`、`mailto:`、`file://` 等)
---
## 2. 尺寸
通过 `SizeType` 控制尺寸,支持 `Large`、`Middle`(默认)、`Small` 三种:
```xml
Large Link
Middle Link
Small Link
```
---
## 3. 带图标
通过 `Icon` 属性在链接文本前显示图标:
```xml
Open Link
```
**Gallery 实际示例**(来自 `AboutUsPage.axaml`):
```xml
Home Page
Gitee
Github
```
---
## 4. 危险样式
通过 `IsDanger="True"` 使用红色链接样式,适用于删除、移除等破坏性操作:
```xml
Delete Account
Remove Data
```
---
## 5. 加载状态
通过 `IsLoading` 属性显示旋转加载图标,适合异步操作等待场景:
```xml
Loading...
```
```xml
Fetch Data
```
```csharp
// Code-behind
public void HandleLinkClick(object? sender, RoutedEventArgs args)
{
if (sender is HyperLinkButton link)
{
link.IsLoading = true;
Dispatcher.UIThread.InvokeAsync(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(2)); // 模拟异步操作
link.IsLoading = false;
});
}
}
```
---
## 6. 作为普通按钮使用(不导航)
不设置 `NavigateUri` 时,HyperLinkButton 就是一个链接样式的普通按钮,适合内联操作:
```xml
Click Me
View Details
```
**Gallery 实际示例**(来自 `CardShowCase.axaml`):
```xml
More
```
---
## 7. 已访问状态
`IsVisited` 属性在导航成功后自动设置,也可手动控制:
```xml
Already Visited
Tracked Link
```
可以通过 `:visited` 伪类为已访问链接设置不同样式:
```xml
```
---
## 8. C# 代码操作
### 动态创建
```csharp
using AtomUI.Desktop.Controls;
using AtomUI.Controls;
var link = new HyperLinkButton
{
Content = "Visit Documentation",
NavigateUri = new Uri("https://docs.example.com"),
SizeType = SizeType.Small
};
parentPanel.Children.Add(link);
```
### 监听导航状态
```csharp
var link = new HyperLinkButton
{
NavigateUri = new Uri("https://example.com"),
Content = "Open Link"
};
link.PropertyChanged += (sender, e) =>
{
if (e.Property == HyperLinkButton.IsVisitedProperty && link.IsVisited)
{
Console.WriteLine("链接已被访问");
}
};
```
---
## 常见组合模式
### 操作链接列表
```xml
Edit
Delete
Help
```
### 表单中的辅助链接
**Gallery 实际示例**(来自 `FormShowCase.axaml`):
```xml
Forgot password
```
### 页面底部导航
```xml
About
|
Privacy
|
Terms
```
### 关于页面
**Gallery 实际示例**(来自 `AboutUsPage.axaml`):
```xml
Home Page
Gitee
Github
```
### 禁用链接
```xml
Unavailable Link
```