树视图
树视图把内容画成侧栏里的树,样式和资源管理器、源代码管理一致。数据由扩展的 TreeDataProvider 提供,VS Code 负责展开、滚动和键盘操作。
清单
先贡献视图容器(活动栏或面板上的一栏),再在容器里贡献视图:
{
"contributes": {
"viewsContainers": {
"activitybar": [
{ "id": "demo", "title": "Demo", "icon": "media/icon.svg" }
]
},
"views": {
"demo": [
{ "id": "demo.tree", "name": "Items" }
]
}
}
}
视图被打开时会激活扩展。1.74 起,自己贡献的视图可以不手写 onView。when 控制视图是否可见。拖到活动栏、标题显示不下时用 icon。离开默认容器后,contextualTitle 用来补上上下文。
提供数据
vscode.window.registerTreeDataProvider('demo.tree', provider);
// 需要 reveal、选中、复选框时改用 createTreeView,它返回 TreeView
const view = vscode.window.createTreeView('demo.tree', { treeDataProvider: provider });
TreeDataProvider 至少实现:
getChildren(element?):不传元素时返回根;传入时返回它的子节点。getTreeItem(element):把你的节点对象转成TreeItem(标签、图标、能否展开、关联的命令)。
可选 getParent,有它才能 reveal 到某个节点。
数据变了就触发 onDidChangeTreeData。参数省略表示整棵树重绘;传入一个元素表示只刷新那一枝。getChildren 由 VS Code 在需要时调用,里面不要做长时间的同步 IO,否则会卡住扩展宿主。
和网页视图怎么选
树适合「一层层的列表、和内置侧栏长得一样」。自由布局、图表、复杂表单用 Webview。树更轻,也自动跟着主题。