首页 > 解决方案 > 在 MaterialDesign 的 DialogHost 中引用 MainWindow 的内容

问题描述

我正在使用 XAML 库中的 Material Design 开发 WPF 应用程序。我想使用一个对话框来显示错误消息。在我读过的文档中,为了使对话框后面的内容变暗和禁用,我必须将它放在 DialogHost 标记中,就在 DialogHost.DialogContent 之后

这就是我现在所拥有的:

<Window>
    <md:DialogHost>
        <md:DialogHost.DialogContent>
            Content of my dialog box
        </md:DialogHost.DialogContent>

    My window's content wrapped in grid.

    </md:DialogHost>
</Window>

问题是:我打算为不同目的添加更多对话框,但我真的不知道该怎么做,因为我必须将其余代码放在 DialogHost 标记中,在我看来应该是有点乱。

相反,我想实现这样的目标:

<Window>
    <Grid>
        <md:DialogHost>
            <md:DialogHost.DialogContent>
                Content of my dialog box
            </md:DialogHost.DialogContent>

        Reference somehow the rest of the window's content

        </md:DialogHost>

        Window's content

    </Grid>
</Window>

我尝试使用 ContentPresenter 但我收到错误消息说属性 Content 不能绑定到可视元素。

如果上面描述的想法是不可能做到的,我怎么能使用超过 1 个对话框呢?因为将一个嵌套在另一个中会导致代码混乱。

标签: wpfxamlmaterial-design

解决方案


您应该首先从主窗口中删除并为您需要的每个对话框<md:DialogHost.DialogContent>创建一个。<UserControl>

在使用此类对话框的 ViewModel 类中,您必须实例化它<UserControl>并将此实例作为 DialogHost.Show 方法的参数提供。

Dim view As New MyDialog1() With {.DataContext = Me}
Dim obj as Object = Await MaterialDesignThemes.Wpf.DialogHost.Show(view)
if obj IsNot Nothing Then
 'do something
EndIf

在这个(VB)示例中,MyDialog1 View 类是使用 VieModel 类的 DataContext 实例化的,允许 View 类访问 ViewModel 类属性。然后调用 DialogHost.Show 方法。View 类可以提供在 View 类关闭后评估的用户响应。


推荐阅读