我正在使用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无法绑定到视觉元素。
如果上述想法无法实现,如何使用多个对话框?因为彼此嵌套会导致代码混乱。
答案 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之后评估。