在MaterialDesign的DialogHost中引用MainWindow的内容

时间:2019-08-13 14:20:07

标签: wpf xaml material-design

我正在使用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 个答案:

答案 0 :(得分:0)

您应该首先从主窗口中删除<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)示例中,使用VieModel类的DataContext实例化了MyDialog1 View类,该类允许View类访问ViewModel类的属性。然后,调用DialogHost.Show方法。 View类可以提供用户响应,该响应在View类的closig之后评估。