You need to enable JavaScript to run this app. MVVMCross WPF如何在根MvxWindow中加载MaterialDesign DialogHost
优惠活动
大模型
产品
解决方案
定价
更多

MVVMCross WPF如何在根MvxWindow中加载MaterialDesign DialogHost

问题原因

你遇到的异常本质是运行时不存在标识符为RootDialog的已加载DialogHost实例,核心原因出在MvvmCross(Mvx)的Wpf视图加载逻辑和DialogHost的使用方式两个方面:

  1. MvxWpf的主窗口如果没有显式声明名为ContentViewPresenter的内容承载控件,框架会直接将启动页(你的DashboardView)设置为MainWindow的Content属性值,直接覆盖了你在MainWindow.xaml里定义的DialogHost控件,导致运行时根窗口里根本没有你声明的RootDialog实例。
  2. MaterialDesign的DialogHost是内容控件,必须将你的页面内容放在DialogHost的内部才能正常工作,单独声明空的DialogHost没有实际作用,也无法正常弹出对话框。

你把DialogHost放在DashboardView里能正常运行的原因是此时DialogHost跟随DashboardView一起被Mvx加载到窗口中,实例确实存在,所以可以被找到,但这种方式无法实现全局复用。

解决方案

修改MainWindow.xaml的结构,在DialogHost内部添加Mvx约定的内容承载控件即可:

<views:MvxWindow
    ...
    >
    <materialDesign:DialogHost Identifier="RootDialog">
        <!-- Mvx会自动将对应ViewModel的View加载到这个约定名称的ContentControl中 -->
        <ContentControl x:Name="ContentViewPresenter" />
    </materialDesign:DialogHost>
</views:MvxWindow>

修改后DialogHost会常驻在根窗口,不会被Mvx的视图加载逻辑覆盖,所有子页面都可以通过RootDialog这个标识符调用全局对话框,不需要在每个子页面单独声明DialogHost。

内容的提问来源于stack exchange,提问作者JF-Mechs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:54:03