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

MudBlazor:点击对话框外部遮罩层时阻止关闭或执行Task

MudBlazor对话框遮罩层相关问题解决方案

1. 阻止点击遮罩层关闭对话框

只需在调用DialogService.Show时,传入配置了CloseOnOverlayClick = false的DialogOptions即可:

var dialogOptions = new DialogOptions 
{ 
    CloseOnOverlayClick = false,
    // 可选:同时禁用ESC键关闭对话框
    // CloseOnEscapeKey = false
};

DialogService.Show<YourCustomDialog>("对话框标题", dialogOptions);

2. 点击遮罩层时执行Task任务

先禁用默认的遮罩关闭行为,再通过对话框实例绑定遮罩点击事件来执行异步任务:

步骤1:定义自定义对话框组件

<MudDialog>
    <DialogContent>
        <!-- 你的对话框内容 -->
        <MudText>这是一个自定义对话框</MudText>
    </DialogContent>
    <DialogActions>
        <MudButton Color="Color.Primary" OnClick="CloseDialog">确认</MudButton>
    </DialogActions>
</MudDialog>

@code {
    [CascadingParameter] private MudDialogInstance DialogInstance { get; set; }

    protected override void OnInitialized()
    {
        // 绑定遮罩点击事件
        DialogInstance.OnOverlayClick += HandleOverlayClick;
        base.OnInitialized();
    }

    private async Task HandleOverlayClick(MouseEventArgs args)
    {
        // 执行你的异步Task任务
        await RunYourAsyncTask();
        
        // 可选:如果执行完任务后需要关闭对话框,取消下面的注释
        // DialogInstance.Close(DialogResult.Cancel());
    }

    private async Task RunYourAsyncTask()
    {
        // 示例异步逻辑:模拟耗时操作
        await Task.Delay(1500);
        Console.WriteLine("遮罩点击触发的异步任务执行完成");
    }

    private void CloseDialog()
    {
        DialogInstance.Close(DialogResult.Ok(true));
    }

    public void Dispose()
    {
        // 解绑事件,防止内存泄漏
        DialogInstance.OnOverlayClick -= HandleOverlayClick;
    }
}

步骤2:打开对话框时禁用默认遮罩关闭

var dialogOptions = new DialogOptions 
{ 
    CloseOnOverlayClick = false 
};

DialogService.Show<YourCustomDialog>("对话框标题", dialogOptions);

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:33:19