# Preview 图片预览

`Preview` 是静态图片预览框，适合打开一张或多张 `System.Drawing.Image`。如果需要在窗体内嵌入图片预览区域，请看 [ImagePreview 图片预览控件](image-preview.html)。

在 aardio 中推荐使用嵌入的 `AntdUI.BaseForm` 或其他 WinForms `Form` 作为 owner。

## 单张图片预览

```aardio
import win.ui;
import dotNet;
import dotNet.AntdUI;
import System.Drawing;

var winform = win.form(text="AntdUI Preview";right=520;bottom=320)
winform.add(customBase={cls="custom";left=0;top=0;right=520;bottom=320;z=1};btn={cls="button";text="预览";left=20;top=20;right=120;bottom=56;z=2})

var baseForm = AntdUI.BaseForm(winform.customBase);

winform.btn.oncommand = function(){
    var bmp = System.Drawing.Bitmap(160,90);
    var cfg = AntdUI.Preview.Config(baseForm,bmp);
    cfg.Fit = AntdUI.TFit.Contain;
    cfg.Keyboard = true;
    AntdUI.Preview.open(cfg);
}

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

## Preview.Config

常用构造：

```aardio
var cfg = AntdUI.Preview.Config(baseForm,image);
```

多图预览可传入 .NET `IList<Image>` 或 `IList<object>` 并配合回调按需取图。简单场景优先使用单图构造，复杂数据源建议先在 C# wiki 签名基础上用反射确认当前 DLL 的泛型参数。

常用属性：

| 属性 | 说明 |
| --- | --- |
| `Form` | 所属 WinForms 窗口，aardio 中推荐 `AntdUI.BaseForm` |
| `Content` | 图片或图片集合数据 |
| `ContentCount` | 图片数量 |
| `SelectIndex` | 当前图片序号，0 基索引 |
| `Fit` | 图片填充方式，`AntdUI.TFit` |
| `Keyboard` | 是否支持 Esc 等键盘操作 |
| `ShowBtn` | 是否显示按钮区域 |
| `ShowDefaultBtn` | 是否显示默认按钮 |
| `BtnSize` / `BtnIconSize` | 按钮与图标大小 |
| `Btns` | 自定义按钮数组，`Preview.Btn[]` |
| `OnBtns` | 自定义按钮回调 |
| `OnSelectIndexChanged` | 图片切换回调 |
| `Tag` | 自定义数据 |

链式设置示例：

```aardio
var cfg = AntdUI.Preview.Config(baseForm,image);
cfg.SetFit(AntdUI.TFit.Contain).SetKeyboard(true).SetShowDefaultBtn(false);
AntdUI.Preview.open(cfg);
```

## 自定义按钮

```aardio
import dotNet;

var btns = dotNet.createArray(AntdUI.Preview.Btn,1);
btns.SetValue(AntdUI.Preview.Btn("download","<svg></svg>"),0);

var cfg = AntdUI.Preview.Config(baseForm,image);
cfg.SetBtns(btns);
AntdUI.Preview.open(cfg);
```

`Preview.Btn` 常用属性：`Name`、`IconSvg`、`Tag`。

`Preview.BtnEvent` 常用属性：`Index`、`Data`、`Tag`。

## 与 ImagePreview 的区别

- `Preview`：静态弹层，调用 `AntdUI.Preview.open(cfg)` 打开预览窗口。
- `ImagePreview`：普通控件，嵌入在窗体某个区域，适合持续显示图片集合。

## 常见坑

- `Preview.Config` 的 owner 是 WinForms `Form`，普通 aardio `win.form` 不能直接替代。
- 传入图片集合时涉及 .NET 泛型集合，建议使用 `dotNet.list(System.Drawing.Image)` 或根据反射结果构造。
- 自定义按钮图标使用 SVG 字符串，示例中 `<svg></svg>` 只是占位。
