问题描述
我正在寻找一种方法来使我的DialogHost
集中在WPF应用程序的中间,为此,我需要在MainGrid
中创建它。
<Grid Name="MainGrid">
<materialDesign:DialogHost CloSEOnClickAway="True">
<materialDesign:DialogHost.DialogContent>
<Grid Margin="20">
<TextBlock Text="My first Dialog" />
</Grid>
</materialDesign:DialogHost.DialogContent>
</materialDesign:DialogHost>
<Grid Name="Grid1" Width="250" Height ="Auto">
... //MyCode
<Button Name="MyButton" Style="{StaticResource MaterialDesignRaisedButton}" Click="ButtonClick">
...
</Grid>
</Grid>
但是,我将用来调用此DialogHost
的按钮在Grid1
中。
有可能这样做吗?如果可以,怎么办?
解决方法
您可以使用Material Design提供的DialogHost.OpenDialogCommand
路由命令。如果将其指定为Command
到按钮,它将引发路由事件,该事件在可视化树中冒泡,直到到达显示该对话框的DialogHost
来处理它为止。例如:
<Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}">
由于此机制通过搜索父级对话主机而起作用,因此您必须为其分配views as content。这意味着将Grid
内的DialogHost
移到DialogContent
之后。
对于您的情况,您可以将DialogHost
直接放入窗口中,也可以将MainGrid
放入窗口宿主内容中。最后,只需要将Grid1
分配给按钮。
OpenDialogCommand