# OptionButtonGroup 使用文档
本文档介绍 AtomUI OptionButtonGroup 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/RadioButtonShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 OptionButtonGroup,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // OptionButton, OptionButtonGroup
using AtomUI.Controls; // SizeType, OptionButtonStyle 等共享类型
```
---
## 1. 基本用法(Outline 样式)
默认 Outline 样式的选项按钮组,选中项以边框颜色和文字颜色区分:
```xml
Hangzhou
Shanghai
Beijing
Chengdu
```
通过 `IsChecked="True"` 设置默认选中项。
---
## 2. Solid 样式
通过 `ButtonStyle="Solid"` 启用实色填充样式,选中项使用主色背景 + 白色文字:
```xml
Hangzhou
Shanghai
Beijing
Chengdu
```
**使用场景指引**:
- **Outline**:适合常规选项切换场景,视觉权重较低
- **Solid**:适合需要强调选中状态的场景(如工具栏模式切换)
---
## 3. 三种尺寸
通过 `SizeType` 属性设置尺寸,支持 `Large`、`Middle`(默认)、`Small` 三种:
```xml
Hangzhou
Shanghai
Beijing
Chengdu
Hangzhou
Shanghai
Beijing
Chengdu
Hangzhou
Shanghai
Beijing
Chengdu
```
---
## 4. 带图标的选项按钮
通过 `Icon` 属性为按钮添加图标,支持图标 + 文字组合:
```xml
macOS
Linux
Windows
macOS
Linux
Windows
```
图标与文本之间的间距由 `SharedToken.SpacingXXS` 控制。
---
## 5. 不同尺寸的图标按钮
```xml
macOS
Linux
Windows
macOS
Linux
Windows
macOS
Linux
Windows
```
---
## 6. 禁用状态
### 禁用单个选项
```xml
Apple
Pear
Orange
```
禁用的选项显示为灰色调,不可点击。已选中的选项也可以被禁用。
### 禁用整个组
```xml
macOS
Linux
Windows
macOS
Linux
Windows
```
### 选中项被禁用
```xml
Hangzhou
Shanghai
Beijing
Chengdu
```
---
## 7. 选中变更事件
通过 `OptionCheckedChanged` 事件监听选中项变更:
```xml
Default
Large
Small
```
```csharp
private void HandleSizeTypeChanged(object? sender, OptionCheckedChangedEventArgs e)
{
// e.CheckedOption — 新选中的按钮实例
// e.Index — 新选中项的索引
var selectedText = e.CheckedOption.Content?.ToString();
// 根据选中项执行相应逻辑...
}
```
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/SkeletonShowCase.axaml` 中使用 OptionButtonGroup 切换 Skeleton 尺寸。
---
## 8. 数据驱动模式
通过 `ItemsSource` 绑定数据集合自动生成按钮:
```csharp
// ViewModel 或 Code-behind
var items = new List
{
new() { Header = "Apple", Icon = new AppleOutlined() },
new() { Header = "Linux", Icon = new LinuxOutlined() },
new() { Header = "Windows", Icon = new WindowsOutlined(), IsEnabled = false }
};
optionButtonGroup.ItemsSource = items;
```
```xml
```
---
## 常见组合模式
### 作为视图模式切换器
```xml
```
### 作为 Skeleton 尺寸切换器
```xml
Default
Large
Small
```
### 作为折叠面板展开按钮位置切换器
```xml
Start
End
```
### 与表单集成
```xml
China
USA
EU
```
### MVVM 绑定选中项
```xml
China
USA
EU
```
```csharp
// ViewModel
[Reactive]
public object? SelectedRegion { get; set; }
```