如何在一个网格上创建DialogHost并在另一个网格上调用

问题描述

我正在寻找一种方法来使我的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