在MaterialDesign的DialogHost中引用MainWindow的内容。

问题描述 投票:0回答:1

我正在使用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个以上的对话框呢?因为一个对话框嵌套一个对话框会导致代码大乱。

wpf xaml material-design
1个回答
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方法。然后调用DialogHost.Show方法。视图类可以提供用户响应,该响应在视图类关闭后被评估。

© www.soinside.com 2019 - 2024. All rights reserved.