# RadioButton 使用文档
本文档介绍 AtomUI RadioButton 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataEntry/RadioButtonShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 RadioButton,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // RadioButton, RadioButtonGroup
using AtomUI.Controls; // RadioButtonOption, IRadioButtonOption
```
---
## 1. 基本用法
最简单的单选框使用方式:
```xml
Radio
```
两个单选框互斥(默认选中一个):
```xml
Option A
Option B
```
---
## 2. 禁用状态
通过 `IsEnabled="False"` 禁用单选框:
```xml
Radio1
Radio2
toggle disabled
```
```csharp
public void ToggleDisabledStatus(object? sender, RoutedEventArgs args)
{
ToggleDisabledRadioUnChecked.IsEnabled = !ToggleDisabledRadioUnChecked.IsEnabled;
ToggleDisabledRadioChecked.IsEnabled = !ToggleDisabledRadioChecked.IsEnabled;
}
```
禁用时的视觉变化:
- 文本变为 `ColorTextDisabled`(灰色)
- 指示器背景变为 `ColorBgContainerDisabled`(灰色背景)
- 如果选中,圆点变为 `DotColorDisabled`(灰色圆点)
- 不可点击,鼠标样式不会变为手型
> 📖 参考:Gallery 中 "Disabled" 示例。
---
## 3. 单选框组(RadioButtonGroup)
### 声明式用法
直接在 AXAML 中声明 RadioButton 子元素:
```xml
Option A
Option B
Option C
```
### 垂直排列
```xml
Option A
Option B
Option C
Option D
```
### 自定义内容(图标 + 文字)
RadioButton 的 `Content` 属性接受任意控件,可以用来创建带图标的选项:
```xml
LineChart
DotChart
BarChart
PieChart
```
> 📖 参考:Gallery 中 "Radio Group" 示例。
### 数据驱动用法
通过 `ItemsSource` 绑定 `IRadioButtonOption` 集合,动态生成子项:
```xml
```
```csharp
// Code-behind 或 ViewModel
var options = new List
{
new() { Content = "Option A" },
new() { Content = "Option B", IsChecked = true },
new() { Content = "Option C" },
new() { Content = "Option D", IsEnabled = false },
};
RadioButtonGroup.ItemsSource = options;
```
使用 ReactiveUI 数据绑定模式:
```csharp
this.OneWayBind(ViewModel, vm => vm.RadioOptions, v => v.RadioButtonGroup.ItemsSource)
.DisposeWith(disposables);
```
> 📖 参考:Gallery 中 "Radio Group by Items source" 示例 及 `RadioButtonShowCase.axaml.cs`。
### 监听选中变化
```csharp
// 声明式用法 — CheckedItem 返回 RadioButton 实例
RadioButtonGroup.CheckedChanged += (sender, args) =>
{
if (args.NewCheckedItem is RadioButton radioButton)
{
Console.WriteLine($"Selected: {radioButton.Content}");
}
};
// 数据驱动用法 — CheckedItem 返回数据对象
RadioButtonGroup.CheckedChanged += (sender, args) =>
{
if (args.NewCheckedItem is RadioButtonOption option)
{
Console.WriteLine($"Selected: {option.Content}");
}
};
```
---
## 4. 按钮样式单选框(OptionButtonGroup)
Ant Design 的 `Radio.Button` 在 AtomUI 中通过 `OptionButtonGroup` + `OptionButton` 实现:
### Outline 样式(默认)
```xml
Apple
Pear
Orange
```
### Solid 填充样式
```xml
Apple
Pear
Orange
```
### 带图标的按钮样式
```xml
macOS
Linux
Windows
```
### 三种尺寸
```xml
Hangzhou
Shanghai
Beijing
Chengdu
Hangzhou
Shanghai
Beijing
Chengdu
Hangzhou
Shanghai
Beijing
Chengdu
```
### 禁用状态
```xml
Hangzhou
Shanghai
Beijing
macOS
Linux
Windows
```
> 📖 参考:Gallery 中 "Option Button"、"Option Button with icon"、"option style"、"Solid option button"、"Size type" 示例。
---
## 5. 控制动画行为
```xml
No Wave
No Animation
A
B
```
---
## 常见组合模式
### 表单中使用
```xml
男
女
其他
```
### 切换视图模式
使用按钮样式单选框在几种模式间切换:
```xml
```
### MVVM 数据绑定
```xml
Option A
Option B
Option C
```
### 混合禁用项
```xml
Apple
Pear
Orange
```
> 📖 参考:Gallery 中 "Option Button" 示例中的第二个 StackPanel。