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

MudBlazor拖拽组件视觉问题:拖拽时显示整个容器而非单个Item

问题解决:MudBlazor拖拽时仅显示Item核心内容

当使用MudDropContainer时,如果Item里包含MudMenu、折叠面板这类额外组件,拖拽过程中会显示整个包含这些组件的容器,但我们只希望显示被拖拽Item的核心内容(比如名称),可以通过以下方法解决:

MudDropContainer提供了DragItemRenderer参数,它专门用于定义拖拽过程中显示的内容。默认情况下,拖拽预览会复用ItemRenderer的内容,所以我们只需要单独指定DragItemRenderer,只渲染Item的核心部分即可。

修改后的完整代码:

<MudDropContainer T="DropItem" Items="_items" ItemsSelector="@((item, dropzone) => item.Identifier == dropzone)" 
                  ItemDropped="ItemUpdated" Class="d-flex flex-wrap flex-grow-1 "
>
    <ChildContent>
        <MudDropZone T="DropItem" Identifier="Drop Zone 1" Class="mud-background-gray pa-6 ma-8 flex-grow-1">
            <MudText Typo="Typo.h5">Drop Zone 1</MudText>
        </MudDropZone>
        <MudDropZone T="DropItem" Identifier="Drop Zone 2" Class="mud-background-gray pa-6 ma-8 flex-grow-1">
            <MudText Typo="Typo.h5">Drop Zone 2</MudText>
        </MudDropZone>
    </ChildContent>
    <!-- 正常显示的Item,保留所有功能组件 -->
    <ItemRenderer>
        <MudPaper Elevation="5" Class="pa-4 my-4">@context.Name
            <MudMenu Class="action__menu user-group-app-item__menu" EndIcon="@Icons.Material.Filled.MoreHoriz" AnchorOrigin="Origin.BottomLeft" TransformOrigin="Origin.TopCenter">
                <MudMenuItem Class="menu-item menu-item__primary" Icon="@Icons.Material.Filled.ReadMore" IconSize="Size.Small" >
                    Overview
                </MudMenuItem>
                <MudMenuItem Class="menu-item menu-item__error" Icon="@Icons.Filled.Delete" IconSize="Size.Small">
                    Remove
                </MudMenuItem>
            </MudMenu>
        </MudPaper>
    </ItemRenderer>
    <!-- 拖拽时显示的预览内容,仅保留核心信息 -->
    <DragItemRenderer>
        <MudPaper Elevation="5" Class="pa-4 my-4">@context.Name</MudPaper>
    </DragItemRenderer>

@code {
    private void ItemUpdated(MudItemDropInfo<DropItem> dropItem)
    {
        dropItem.Item.Identifier = dropItem.DropzoneIdentifier;
    }

    private List<DropItem> _items = new()
    {
        new DropItem(){Name="Item 1", Identifier="Drop Zone 1"},
        new DropItem(){Name="Item 2", Identifier="Drop Zone 1"},
        new DropItem(){Name="Item 3", Identifier="Drop Zone 2"}
    };

    public class DropItem
    {
        public string Name { get; init; }
        public string Identifier { get; set; }
    }
}

这样设置后,拖拽时就只会显示不带菜单的Item核心内容,正常显示的Item依然保留所有功能组件,拖拽结果也不受影响。

内容的提问来源于stack exchange,提问作者Yurii.V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:18:21