Folder

以可展开 / 收起的层级树呈现目录与文件:目录用 folder / folder-open 图标、文件按扩展名复用 FileCard 的分类配色与图标表自动着色,点目录展开 / 收起(OnExpand)、点文件选中(OnSelect,可 @bind-SelectedKey 双向绑定)。Selectable / ShowIcon / ShowSize / DefaultExpandAll 开关,逐节点 Disabled 与空态文案;递归渲染、纯展示、无 JS 互操作。

最后更新

说明

面向“资源管理器 / 知识库目录 / 工程结构 / 会话产出多文件”的层级树组件,把一棵 FolderNode(Name 必填,Children 递归子节点,Folder 标记空目录,Type 显式扩展名或 MIME,Size 字节数,Icon / Color 覆盖,Expanded 初始展开,Disabled 禁用,Key 稳定标识)渲染成可交互的树。IsDir(有子节点或 Folder 为真)决定行形态:目录行左侧有箭头,收起用 chevron-right、展开用 chevron-down,图标随展开在 folder / folder-open 间切换并着暖色;文件行复用 FileCard 同一套“扩展名 / MIME → 分类色 + 图标”映射(未给 Type 时从 Name 后缀推断),也可用 Icon / Color 逐项覆盖。点击目录(箭头或整行)切换展开并经 OnExpand 回传该目录;点击文件在 Selectable(默认 true)下更新选中态、经 OnSelect 回传节点,选中项标识同时写入 SelectedKey(支持 @bind-SelectedKey 双向绑定,可被宿主外部改变回填选中)。DefaultExpandAll 在首次渲染展开全部目录,否则按各节点 Expanded;ShowIcon(默认 true)控制行首图标,ShowSize(默认 false)在文件行尾显示格式化大小(B / KB / MB / GB / TB,Size ≤ 0 不显示),Disabled 的节点整行置灰不可点。展开 / 选中状态由根组件持有一份内部上下文并下传给递归子组件共享,点击任意行都触发整树重渲染,无需外部管理。组件为纯展示、无 JS 互操作,目录名 / 文件名 / 类型 / 图标 / 颜色均视为业务数据、直接展示不本地化,仅 EmptyText 自定义空态走词条(Nodes 为空且有 EmptyText 时显示)。常与 FileCard / Attachments 搭档,前者陈列已知文件、本组件组织其层级脉络。

常见能力:

  • 可展开 / 收起的递归层级树:目录 folder / folder-open 暖色图标,箭头 chevron 随状态切换
  • 文件行复用 FileCard 的“扩展名 / MIME → 分类色 + 图标”映射,Icon / Color 可逐项覆盖
  • 点目录展开收起触发 OnExpand;点文件在 Selectable 下选中触发 OnSelect
  • SelectedKey 支持 @bind-SelectedKey 双向绑定,选中态可被宿主外部回填
  • DefaultExpandAll 首屏全展开;逐节点 Expanded / Disabled 可控;空态 EmptyText 走词条
  • ShowIcon 行首图标开关、ShowSize 文件行尾格式化大小(B/KB/MB/GB/TB,≤0 不显示)
  • 展开 / 选中状态由根组件内部共享上下文托管,递归渲染、纯展示、无 JS 互操作

用法

<Folder Nodes="@tree" Selectable="true" ShowSize="true"
       @bind-SelectedKey="_sel" OnSelect="Pick" OnExpand="Toggle" />

<p>已选中:@_sel</p>

@code {
    string _sel;
    List<FolderNode> tree = new()
    {
        FolderNode.Dir("src", new FolderNode("Program.cs", "cs", 860),
            FolderNode.Dir("Models", new FolderNode("Order.cs", "cs", 1890))),
        new("README.md", "md", 1536),
        new("bundle.zip", "zip", 18_400_000),
    };
    void Pick(FolderNode n) => UI.Info($"选中 {n.Name}");
    void Toggle(FolderNode n) { }
}

API 参数

参数 类型 默认值 说明
DefaultExpandAll bool false 首次渲染时是否展开全部目录。默认 false(按各节点的 Expanded)。
EmptyText string null 空态文本(作为翻译键)。留空则不显示空态。
Nodes List<FolderNode> null 树节点集合(根层),子层级由 Children 递归承载。
OnExpand EventCallback<FolderNode> — 事件 展开 / 收起某个目录的回调(回传该目录节点,展开状态见 FolderNode)。
OnSelect EventCallback<FolderNode> — 事件 选中某个文件叶的回调。
Selectable bool true 是否可点选文件(选中态与 OnSelect 生效)。默认 true。
SelectedKey string null 当前选中节点的标识(Key 优先,缺省为 Name);支持 @bind-SelectedKey。
SelectedKeyChanged EventCallback<string> — 事件 SelectedKey 变化回调(双向绑定用)。
ShowIcon bool true 是否显示行首的类型 / 文件夹图标。默认 true。
ShowSize bool false 是否在行尾显示文件大小(仅文件叶)。默认 false。
Visible bool true 取得或设置组件是否可见,默认为false。
VisibleChanged EventCallback<bool> — 事件 取得或设置组件可见性变化时的回调事件。
Class string null 取得或设置组件的CSS类名,用于自定义样式。
Disabled bool false 取得或设置组件是否禁用,默认为false。
Style string null 取得或设置组件的内联样式,用于自定义样式。

所有组件均继承 BaseComponent,除上表参数外还支持 Class、Style、Disabled、Visible。

微信公众号二维码 扫码关注公众号
QQ 交流群二维码 扫码加入 QQ 群