# SplitButton 使用文档
本文档介绍 AtomUI SplitButton 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 SplitButton,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // SplitButton 控件
using AtomUI.Controls; // SizeType 等共享类型
```
---
## 1. 基本用法
最基本的组合按钮,左侧主按钮执行默认操作,右侧按钮触发下拉菜单:
```xml
Hover me
```
**要点**:
- `Flyout` 属性接受 `MenuFlyout`,其中包含 `MenuItem` 菜单项
- 左侧主按钮点击触发 `Click` 事件,右侧按钮触发 Flyout 弹出
- 默认下拉按钮图标为 `EllipsisOutlined`(省略号)
- 默认使用 `Default` 样式(白色背景 + 边框)
---
## 2. 按钮类型
SplitButton 支持两种按钮类型,通过 `IsPrimaryButtonType` 属性切换:
```xml
Default
Primary
```
**使用场景指引**:
- **Default**:常规场景,并列操作区域中使用
- **Primary**:需要强调主操作的场景,如「提交」+ 下拉更多提交选项
---
## 3. 按钮尺寸
通过 `SizeType` 属性设置尺寸,支持 `Large`、`Middle`(默认)、`Small` 三种:
```xml
Large
Middle
Small
Large
Middle
Small
```
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` 中 "Size" 示例。
---
## 4. 危险按钮
通过 `IsDanger="True"` 标记危险操作,Default 和 Primary 类型均支持:
```xml
Default
Primary
```
**使用场景**:删除、移动、修改权限等不可逆操作。
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` 中 "Danger Buttons" 示例。
---
## 5. 自定义下拉图标
通过 `OpenIndicator` 属性自定义右侧下拉按钮的图标(默认为 `EllipsisOutlined`):
```xml
Default
Custom Icon
```
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` 中 "Custom Icon" 示例。
---
## 6. 主按钮带图标
通过 `Icon` 属性为左侧主按钮添加图标:
```xml
Download
```
---
## 7. 触发方式
支持 `Click`(默认)和 `Hover` 两种触发方式:
```xml
Hover Me
Click Me
```
**触发方式说明**:
- **Click**:点击右侧下拉按钮弹出菜单(桌面端推荐,操作明确)
- **Hover**:鼠标悬浮在右侧按钮上时弹出菜单(适合预览场景,减少点击次数)
使用 `Hover` 模式时,可通过 `MouseEnterDelay` 和 `MouseLeaveDelay` 控制延迟:
```xml
Custom Delay
```
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` 中 "Flyout trigger type" 示例。
---
## 8. 弹出位置和箭头
通过 `Placement` 控制弹出方向,`IsShowArrow` 控制箭头显示:
```xml
Bottom Right
Bottom Center with Arrow
Top
```
---
## 9. 主按钮点击事件与 Command
### 事件方式
```xml
Submit
```
```csharp
// Code-behind
private void HandleSplitButtonClick(object? sender, RoutedEventArgs e)
{
// 处理主按钮点击
Debug.WriteLine("SplitButton primary clicked!");
}
```
### Command 方式(MVVM)
```xml
Submit
```
```csharp
// ViewModel(使用 ReactiveUI)
[Reactive]
public ReactiveCommand SubmitCommand { get; }
public MyViewModel()
{
var canSubmit = this.WhenAnyValue(x => x.IsValid);
SubmitCommand = ReactiveCommand.CreateFromTask(
async (param) => { await _repository.SubmitAsync(param); },
canSubmit);
}
```
当 `CanExecute` 返回 `false` 时,SplitButton 会**自动禁用**(灰色调 + 不可点击),无需手动管理 `IsEnabled`。
---
## 10. 键盘快捷键
利用 `HotKey` 属性设置键盘快捷键:
```xml
Save (Ctrl+S)
```
**内置键盘交互**(无需配置):
- `Space` / `Enter`:触发主按钮点击
- `Alt+Down` / `F4`:打开 Flyout
- `Escape`:关闭 Flyout
---
## 11. 禁用状态
通过 `IsEnabled="False"` 禁用 SplitButton,两个内部按钮同步禁用:
```xml
Default
Default (disabled)
Primary
Primary (disabled)
```
---
## 12. 控制动画行为
```xml
No Animation
No Wave
```
---
## 常见组合模式
### 主操作 + 更多操作
最常见的场景——主按钮执行默认操作,下拉菜单提供替代方案:
```xml
Submit
```
### 下载按钮 + 格式选择
```xml
Download
```
### 危险操作 + 确认选项
```xml
Delete
```
### 操作栏组合(SplitButton + Button)
```xml
Save
Cancel
```