# Drawer 使用文档
本文档介绍 AtomUI Drawer 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
> 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/DrawerShowCase.axaml`
---
## 前置准备
在 AXAML 中使用 Drawer,需要引入以下命名空间:
```xml
xmlns:atom="https://atomui.net"
```
在 C# 代码中引入:
```csharp
using AtomUI.Desktop.Controls; // Drawer, DrawerPlacement
using AtomUI.Controls; // CustomizableSizeType
using AtomUI; // Dimension, DimensionUnitType
```
---
## 1. 基础抽屉
通过 `IsOpen` 属性控制抽屉的打开和关闭,通常使用数据绑定或控件属性绑定:
```xml
```
---
## 2. 自定义方向
通过 `Placement` 属性设置抽屉从哪个边缘滑入:
```xml
```
使用 OptionButtonGroup 动态切换方向:
```xml
Placement:
Left
Top
Right
Bottom
```
```csharp
private void HandlePlacementChanged(object? sender, OptionCheckedChangedEventArgs args)
{
var option = args.CheckedOption;
if (option.IsChecked == true && option.Tag is DrawerPlacement placement)
{
if (DataContext is MyViewModel vm)
{
vm.DrawerPlacement = placement;
}
}
}
```
---
## 3. 多级抽屉
在一个 Drawer 的内容中声明另一个 Drawer,打开子抽屉时父抽屉会自动推开:
```xml
Two-level drawer
```
```csharp
private void HandleOpenSecondLevel(object? sender, RoutedEventArgs e)
{
SecondLevelDrawer.IsOpen = true;
}
```
> **说明**:子 Drawer 会自动继承父 Drawer 的 `OpenOn` 和 `IsMotionEnabled` 属性。推移量由 `PushOffsetPercent`(默认 40%)控制。
---
## 4. 标题栏额外操作和底部区域
通过 `Extra` 和 `Footer` 属性设置额外内容:
```xml
Cancel
Ok
Edit
Upload
Delete
```
---
## 5. 无遮罩模式
通过 `IsShowMask="False"` 隐藏遮罩层,用户可以同时操作抽屉和主内容区域:
```xml
```
---
## 6. 预设尺寸和自定义尺寸
### 预设尺寸
通过 `SizeType` 属性选择预设尺寸:
```csharp
// 小号(默认 378px)
drawer.SizeType = CustomizableSizeType.Small;
// 大号(736px)
drawer.SizeType = CustomizableSizeType.Large;
```
### 自定义像素尺寸
```csharp
drawer.SizeType = CustomizableSizeType.Custom;
drawer.DialogSize = new Dimension(400); // 400px
drawer.IsOpen = true;
```
### 自定义百分比尺寸
```csharp
drawer.SizeType = CustomizableSizeType.Custom;
drawer.DialogSize = new Dimension(50, DimensionUnitType.Percentage); // 50%
drawer.IsOpen = true;
```
也可以在 AXAML 中使用百分比:
```xml
```
> 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/DrawerShowCase.axaml` 中 "Preset size" 示例。
---
## 7. 作用域渲染
默认情况下抽屉在整个窗口区域渲染。通过 `OpenOn` 属性可以限制渲染范围:
```xml
Render in this
```
> **说明**:`OpenOn` 可以绑定到任何 `Control`,Drawer 将仅在该控件区域内渲染。
---
## 常见组合模式
### 列表详情模式
```xml
```
### 设置面板模式
```xml
Save
Theme
Light
Dark
```
### 表单编辑模式
```xml
Cancel
Save
```