# Tree 树形控件

Tree 用于展示多层级结构。常见场景包括目录树、权限树、组织结构、可勾选层级列表等。

```aardio
import win.ui;
var winform = win.form(text="AntdUI Tree";right=720;bottom=460)
winform.add(host={cls="custom";left=20;top=20;right=360;bottom=420;z=1})

import dotNet.AntdUI;

var tree = AntdUI.Tree(winform.host);
tree.Checkable = true;
tree.BlockNode = true;
tree.EmptyText = "暂无节点";

var root = AntdUI.TreeItem("项目");
root.ID = "project";
root.Expand = true;

var docs = AntdUI.TreeItem("文档");
docs.ID = "docs";
docs.Sub.Add( AntdUI.TreeItem("快速上手") );
docs.Sub.Add( AntdUI.TreeItem("组件示例") );

var src = AntdUI.TreeItem("源码");
src.ID = "src";
src.Checked = true;

root.Sub.Add(docs);
root.Sub.Add(src);
tree.Items.Add(root);

tree.SelectChanged = function(sender,e){
    var item = tree.SelectItem;
    if(item) winform.text = "当前节点：" + item.Text;
}

tree.CheckedChanged = function(sender,e){
    // 常用：e.Item / e.Value，具体字段以当前 DLL 事件参数为准
}

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

## 常用属性

- `Items`：根节点集合，添加 `AntdUI.TreeItem`。
- `Checkable`：显示复选框。
- `CheckStrictly`：父子节点勾选是否完全独立。
- `BlockNode`：节点占满一行，适合导航树。
- `Multiple`：支持多选。
- `SelectItem`：当前选中节点。
- `VirtualMode`：大数据量时只渲染可见行。
- `Empty` / `EmptyText`：空数据提示。
- `Gap` / `GapIndent` / `Radius`：间距、缩进与圆角。

## TreeItem 常用属性

- `Text`：节点文本。
- `ID` / `Name`：业务标识，可配合 `FindID()` / `FindName()`。
- `IconSvg`：SVG 图标。
- `SubTitle`：副标题。
- `Sub`：子节点集合。
- `Visible` / `Enabled`：是否显示、启用。
- `Loading`：节点加载状态。
- `Expand`：展开状态。
- `Checked` / `CheckState`：勾选状态。
- `Checkable`：单个节点是否显示复选框。
- `Tag`：绑定业务对象。

## 常用方法

- `ExpandAll(true)` / `ExpandAll(false)`：展开或收起全部。
- `Select(item)` / `SelectID(id)` / `SelectName(name)`：选中节点。
- `USelect()`：取消选择。
- `GetSelects()`：获取所有选中节点。
- `GetCheckeds()`：获取所有勾选节点。
- `SetCheckeds(true)`：全选或全不选。
- `Search(text)`：按文本搜索筛选。
- `FindID(id)` / `FindName(name)`：查找节点。
- `Focus(item)`：滚动定位到节点。

## 常用事件

- `SelectChanged`：选中节点变化。
- `CheckedChanged`：勾选状态变化。
- `BeforeExpand` / `AfterExpand`：展开前后。
- `NodeMouseClick` / `NodeMouseDoubleClick`：节点点击、双击。
- `NodeMouseDown` / `NodeMouseUp` / `NodeMouseMove`：更细粒度鼠标事件。

## 注意

- `TreeItem.Sub` 是 .NET 集合，追加子节点用 `.Add(...)`。
- 如果要延迟加载子节点，可在 `BeforeExpand` 中判断 `item.Sub.Count` 并添加节点，再允许展开。
- 智能提示只列高频成员；上游 wiki 中还有 `HitTest`、`ReverseCheckItem`、`FullPath()` 等高级用法。
