# QRCode 使用文档
本文档介绍 AtomUI QRCode 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/QRCodeShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 QRCode,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // QRCode 控件
using AtomUI.Controls; // QRCodeEccLevel, QRCodeStatus 等共享类型
```
---
## 1. 基本用法
最简单的使用方式——指定 `Value` 属性即可生成二维码:
```xml
```
可以与输入框绑定,实现动态修改二维码内容:
```xml
```
```csharp
// ViewModel
public class QRCodeViewModel : ReactiveObject
{
private string _qrCodeInput = "https://atomui.net";
public string QRCodeInput
{
get => _qrCodeInput;
set => this.RaiseAndSetIfChanged(ref _qrCodeInput, value);
}
}
```
---
## 2. 带中心图标
通过 `Icon` 属性在二维码中央叠加 Logo 或品牌图标:
```xml
```
> **提示**:使用中心图标时建议将 `EccLevel` 设为 `Q` 或 `H`,以确保被遮挡区域的信息仍能被正确识别。
带图标并指定图标大小:
```xml
```
---
## 3. 不同状态
通过 `Status` 属性控制二维码的四种状态:
```xml
```
**各状态的默认表现**:
- **Loading**:半透明遮罩 + 居中旋转加载指示器(`Spin`)
- **Expired**:半透明遮罩 + "二维码过期"文案 + 带刷新图标的链接按钮
- **Scanned**:半透明遮罩 + "已扫描"文案
---
## 4. 自定义状态渲染内容
每种非 Active 状态均支持自定义渲染内容,通过 `LoadingContent`、`ExpiredContent`、`ScannedContent` 属性设置:
### 自定义加载状态
```xml
Loading...
```
### 自定义过期状态
```xml
二维码过期
点击刷新
```
### 自定义已扫描状态
```xml
已扫描
```
---
## 5. 自定义尺寸
通过 `Size` 属性控制二维码的像素大小,同时可动态调整 `IconSize`:
```xml
Smaller
Larger
```
```csharp
// ViewModel(使用 ReactiveUI)
public class QRCodeViewModel : ReactiveObject
{
private const double MinSize = 48;
private const double MaxSize = 300;
private int _size = 160;
public int Size
{
get => _size;
set => this.RaiseAndSetIfChanged(ref _size, value);
}
private readonly ObservableAsPropertyHelper _iconSize;
public int IconSize => _iconSize.Value;
public ReactiveCommand