# StackPanel 堆栈布局

`AntdUI.StackPanel` 按水平方向或垂直方向顺序排列子控件，适合工具条、表单行、按钮组等简单线性布局。

## 最小示例

```aardio
import win.ui;
import dotNet.AntdUI;
import System.Windows.Forms;
import System.Drawing;
/*DSG{{*/
var winform = win.form(text="AntdUI StackPanel";right=640;bottom=180)
winform.add(host={cls="custom";left=20;top=30;right=620;bottom=110;dl=1;dr=1;dt=1;z=1})
/*}}*/

var panel = AntdUI.StackPanel(winform.host);
panel.Vertical = false;
panel.Gap = 10;
panel.AutoScroll = true;
panel.Padding = System.Windows.Forms.Padding(10);

// StackPanel 横向布局中，ItemSize 表示每一项的宽度。
panel.ItemSize = "88";

var btnSave = AntdUI.Button();
btnSave.Text = "保存";
btnSave.Type = AntdUI.TTypeMini.Primary;
btnSave.Size = System.Drawing.Size(88,32);

var btnCancel = AntdUI.Button();
btnCancel.Text = "取消";
btnCancel.Size = System.Drawing.Size(88,32);

var btnDelete = AntdUI.Button();
btnDelete.Text = "删除";
btnDelete.Type = AntdUI.TTypeMini.Error;
btnDelete.Size = System.Drawing.Size(88,32);

// AntdUI 2.4.1 的 StackPanel 会将后添加的控件排在前面。
// 下面按反序添加，使视觉顺序为：保存、取消、删除。
panel.Controls.Add(btnDelete);
panel.Controls.Add(btnCancel);
panel.Controls.Add(btnSave);

winform.show();
panel.PerformLayout();
win.loopMessage();
```

## 常用属性与方法

| 成员 | 说明 |
| --- | --- |
| `Vertical` | 是否垂直排列；`false` 为水平排列。 |
| `Gap` | 子控件之间的间距。 |
| `ItemSize` | 子控件主轴尺寸规则字符串。横向布局表示宽度，纵向布局表示高度；不指定时使用子控件当前 `Width`/`Height`。 |
| `AutoScroll` | 内容超出时是否显示滚动条。 |
| `RightToLeft` | 反向布局。 |
| `PauseLayout` | 批量调整时暂停布局。 |
| `Add(control)` | 添加子控件。 |
| `AddToFront(control)` / `AddToBack(control)` | 添加到前/后。 |
| `Remove(control)` / `RemoveAt(index)` / `Clear()` | 删除子控件。 |

## 注意事项

- 在 aardio 窗体中若要在一个区域放多个 AntdUI 子控件，推荐先创建 `StackPanel(winform.host)`，再创建无宿主子控件并 `panel.Add(child)`。
- `StackPanel` 按子控件当前尺寸计算主轴尺寸；无宿主创建的普通控件初始 `Width/Height` 可能为 0。横向布局请设置 `ItemSize` 或子控件 `Width`，纵向布局请设置 `ItemSize` 或子控件 `Height`。
- 如果在少数环境中先添加子控件、后显示窗体时布局没有立即刷新，可在 `winform.show()` 后调用一次 `panel.PerformLayout()`。
- 在 AntdUI 2.4.1 中，`StackPanel` 的视觉排列顺序与添加顺序相反；如果顺序重要，可按反序添加。
- 需要复杂二维布局时优先考虑 `GridPanel`；需要自动换行时优先考虑 `FlowPanel`。
