wpf自定义显示DialogHost
时间: 2023-08-08 09:05:53 浏览: 669
要自定义显示 DialogHost,你可以按照以下步骤进行操作:
1. 创建 DialogHost 控件的自定义模板。
2. 在模板中,添加一个 ContentPresenter 控件,用来显示 DialogHost 中的内容。
3. 在模板中,添加一个 Grid 控件,用来放置 DialogHost 的按钮和标题等控件。
4. 在 Grid 中添加需要的控件,比如标题、关闭按钮等。
5. 在关闭按钮的 Click 事件中,使用 VisualTreeHelper 查找 DialogHost 控件,并将其 IsOpen 属性设置为 false,关闭对话框。
6. 在需要显示对话框的地方,使用 DialogHost.Show 方法显示 DialogHost 控件,并将要显示的内容作为参数传入。
示例代码如下:
```xml
<Style TargetType="{x:Type MaterialDesignThemes:DialogHost}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MaterialDesignThemes:DialogHost}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Row="1"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter Content="{TemplateBinding DialogContent}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<Grid Grid.Row="0"
Background="{TemplateBinding Background}"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{TemplateBinding Title}"
VerticalAlignment="Center"
Margin="10,0,0,0"/>
<Button Grid.Column="1"
Content="X"
Width="20"
Height="20"
FontSize="12"
FontFamily="Segoe MDL2 Assets"
Background="Transparent"
Foreground="{DynamicResource MaterialDesignDivider}"
Command="{Binding Path=CloseCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MaterialDesignThemes:DialogHost}}}"
Cursor="Hand"
ToolTip="Close"/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
```
使用 DialogHost.Show 方法显示对话框:
```csharp
var dialog = new CustomDialog();
DialogHost.Show(dialog, "RootDialog");
```
其中,CustomDialog 是自定义对话框的内容。 "RootDialog" 是 DialogHost 控件的名称。
阅读全文