You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telerik Blazor FileManager(.NET 8)右键菜单定制技术问询

Telerik UI for Blazor FileManager(.NET 8)右键菜单定制方案

1. 仅针对文件夹禁用/移除Delete、Rename选项

方式一:通过OnContextMenuOpen事件动态控制

利用组件的OnContextMenuOpen事件,可在右键菜单打开前根据选中项类型修改菜单项状态或直接移除项:

先绑定事件到FileManager组件:

<TelerikFileManager Data="@FileManagerData"
                    OnContextMenuOpen="@OnFileManagerContextMenuOpen">
    <!-- 你的FileManager配置(如Toolbar、Content等) -->
</TelerikFileManager>

然后实现事件逻辑:

private void OnFileManagerContextMenuOpen(FileManagerContextMenuOpenEventArgs args)
{
    var selectedItem = args.ContextMenuItems.FirstOrDefault()?.DataItem as FileManagerItem;
    
    if (selectedItem != null && selectedItem.Type == FileManagerItemType.Folder)
    {
        // 通过CommandName查找默认菜单项(比Text更稳定,不受本地化影响)
        var deleteItem = args.ContextMenuItems.FirstOrDefault(i => i.CommandName == "Delete");
        var renameItem = args.ContextMenuItems.FirstOrDefault(i => i.CommandName == "Rename");

        // 方案A:禁用菜单项
        if (deleteItem != null) deleteItem.Enabled = false;
        if (renameItem != null) renameItem.Enabled = false;

        // 方案B:直接移除菜单项(无需保留禁用状态显示时用)
        // args.ContextMenuItems.Remove(deleteItem);
        // args.ContextMenuItems.Remove(renameItem);
    }
}

方式二:通过ContextMenuTemplate完全自定义菜单

若需更精细控制,可直接替换默认菜单模板,根据项目类型决定显示项:

<TelerikFileManager Data="@FileManagerData">
    <ContextMenuTemplate>
        @{
            var currentItem = context as FileManagerItem;
        }
        <TelerikContextMenu>
            <ContextMenuItems>
                <!-- 仅对文件显示Delete和Rename -->
                @if (currentItem.Type == FileManagerItemType.File)
                {
                    <ContextMenuItem Text="Delete" CommandName="Delete" />
                    <ContextMenuItem Text="Rename" CommandName="Rename" />
                    <ContextMenuSeparator />
                }
                <!-- 保留其他默认菜单项 -->
                <ContextMenuItem Text="Download" CommandName="Download" />
            </ContextMenuItems>
        </TelerikContextMenu>
    </ContextMenuTemplate>
    <!-- 其他FileManager配置 -->
</TelerikFileManager>

2. 添加自定义右键菜单选项

方式一:在默认菜单中追加自定义项

通过OnContextMenuOpen事件向默认菜单添加自定义项,无需替换整个模板:

private void OnFileManagerContextMenuOpen(FileManagerContextMenuOpenEventArgs args)
{
    var selectedItem = args.ContextMenuItems.FirstOrDefault()?.DataItem as FileManagerItem;

    // 添加"分享"自定义项
    args.ContextMenuItems.Add(new ContextMenuItem
    {
        Text = "分享",
        Icon = "share", // 使用Telerik内置图标
        CommandName = "CustomShare",
        Enabled = selectedItem != null // 仅选中项存在时启用
    });

    // 添加"归档"自定义项
    args.ContextMenuItems.Add(new ContextMenuItem
    {
        Text = "归档",
        Icon = "archive",
        CommandName = "CustomArchive"
    });
}

再通过OnCommand事件处理点击逻辑:

<TelerikFileManager Data="@FileManagerData"
                    OnContextMenuOpen="@OnFileManagerContextMenuOpen"
                    OnCommand="@OnFileManagerCommand">
    <!-- 其他配置 -->
</TelerikFileManager>
private void OnFileManagerCommand(FileManagerCommandEventArgs args)
{
    var selectedItem = args.SelectedItems.FirstOrDefault();
    if (selectedItem == null) return;

    switch (args.CommandName)
    {
        case "CustomShare":
            // 执行分享逻辑(如弹窗、API调用)
            Console.WriteLine($"分享:{selectedItem.Name}");
            break;
        case "CustomArchive":
            // 执行归档逻辑
            Console.WriteLine($"归档:{selectedItem.Name}");
            break;
    }
}

方式二:通过ContextMenuTemplate添加自定义项(支持子菜单/分隔线)

若需复杂菜单结构(如子菜单、分隔线),使用模板更灵活:

<TelerikFileManager Data="@FileManagerData"
                    OnCommand="@OnFileManagerCommand">
    <ContextMenuTemplate>
        @{
            var currentItem = context as FileManagerItem;
        }
        <TelerikContextMenu>
            <ContextMenuItems>
                <!-- 默认菜单项 -->
                @if (currentItem.Type == FileManagerItemType.File)
                {
                    <ContextMenuItem Text="Delete" CommandName="Delete" />
                    <ContextMenuItem Text="Rename" CommandName="Rename" />
                    <ContextMenuSeparator />
                }
                <ContextMenuItem Text="Download" CommandName="Download" />
                <ContextMenuSeparator />
                <!-- 自定义项 -->
                <ContextMenuItem Text="分享" CommandName="CustomShare" Icon="share" />
                <ContextMenuItem Text="归档" CommandName="CustomArchive" Icon="archive" />
                <ContextMenuSeparator />
                <!-- 带子菜单的自定义项 -->
                <ContextMenuItem Text="批量操作">
                    <ContextMenuItem Text="移动到指定文件夹" CommandName="CustomMove" />
                    <ContextMenuItem Text="复制到指定文件夹" CommandName="CustomCopy" />
                </ContextMenuItem>
            </ContextMenuItems>
        </TelerikContextMenu>
    </ContextMenuTemplate>
    <!-- 其他配置 -->
</TelerikFileManager>

同样在OnCommand事件中处理子菜单的命令逻辑即可。

内容的提问来源于stack exchange,提问作者Hằng Phạm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:04:50