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

如何让对话框右上角[X]关闭按钮返回带参数的DialogResult

问题解决方法

你不需要移除对话框右上角自带的X关闭按钮,直接通过Prism对话框的生命周期拦截逻辑即可实现需求——不管通过哪种方式触发对话框关闭,框架都会调用IDialogAware接口定义的OnDialogClosing方法,你只需要在这个方法里统一补全返回参数即可。

具体实现

保留你原有的确认按钮关闭逻辑不用改,在对话框对应的ViewModel中重写OnDialogClosing方法,适配点X关闭的场景即可,注意不同Prism版本方法签名略有区别,根据你引用的版本选对应写法:

  • Prism 8.x 及以上版本写法
public override void OnDialogClosing()
{
    // 已经通过确认按钮触发关闭的场景,已经赋值过参数,直接跳过
    if (CanCloseDialog) return;

    // 点X触发关闭的场景,补全参数和返回结果
    CanCloseDialog = true;
    DialogParameters parm = new DialogParameters();
    parm.Add("CreatedGroups", _createdGroups);
    DialogResult = new DialogResult(ButtonResult.OK, parm);
}
  • Prism 7.x版本写法
public override void OnDialogClosing(DialogClosingEventArgs args)
{
    // 判断当前关闭请求是否已经携带目标参数
    if (args.Result?.Parameters?.ContainsKey("CreatedGroups") != true)
    {
        DialogParameters parm = new DialogParameters();
        parm.Add("CreatedGroups", _createdGroups);
        args.Result = new DialogResult(ButtonResult.OK, parm);
    }
    CanCloseDialog = true;
}

注意事项

  • 不要直接给窗口右上角X按钮挂自定义点击事件,Prism对对话框窗口做了封装,直接修改原生按钮事件很容易破坏框架内置的对话框生命周期,导致内存泄漏或者返回值异常。
  • 重写OnDialogClosing的方式会覆盖所有关闭入口(包括按Alt+F4、点X、点自定义按钮),可以保证所有关闭路径都能正确返回你需要的CreatedGroups参数,不需要单独为每个关闭入口写重复逻辑。

内容的提问来源于stack exchange,提问作者リムウェイ チェン

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:48:18