# 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 SmallerCommand { get; } public ReactiveCommand LargerCommand { get; } public QRCodeViewModel(IScreen screen) { var smallerCanExecute = this.WhenAnyValue(x => x.Size, size => size > MinSize); var largerCanExecute = this.WhenAnyValue(x => x.Size, size => size < MaxSize); SmallerCommand = ReactiveCommand.Create