私は WPF アプリケーションを構築しており、カスタム MessageBox を使用したいと考えていますが、それは非常に面倒であり、MaterialDesign が提供する DialogHost を使用することを考えました。問題は、希望どおりに動作させることができないことです。そのため、現在の動作と必要な動作について説明させてください。
現在の動作:
<materialDesign:ColorZone Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="1"
Mode="Light"
Padding="16">
<DockPanel>
<materialDesign:DialogHost DockPanel.Dock="Right">
<Button x:Name="PowerButton"
ToolTip="{Binding PowerButtonToolTip, Source={StaticResource ResourceKey=ButtonsResources}}"
Style="{StaticResource MaterialDesignIconButton}"
Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}">
<Button.CommandParameter>
<StackPanel>
<TextBlock Text="TODO" />
<StackPanel Orientation="Horizontal"
Margin="0, 20, 0, 10">
<Button Width="90"
Height="30"
Margin="10, 0, 0, 0"
Style="{StaticResource MaterialDesignOutlinedButton}"
Click="PowerButton_Click">
OK
</Button>
<Button Width="90"
Height="30"
Margin="10, 0, 10, 0"
Style="{StaticResource MaterialDesignOutlinedButton}"
Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}">
CANCEL
</Button>
</StackPanel>
</StackPanel>
</Button.CommandParameter>
<materialDesign:PackIcon Kind="Power" />
</Button>
</materialDesign:DialogHost>
<StackPanel Orientation="Horizontal">
<ToggleButton x:Name="MenuButton"
Style="{DynamicResource MaterialDesignHamburgerToggleButton}" />
<TextBlock VerticalAlignment="Center"
Margin="16 0 0 0"
Text="{Binding MainViewTitle, Source={StaticResource ResourceKey=ViewsResources}}">
</TextBlock>
</StackPanel>
</DockPanel>
</materialDesign:ColorZone>
PowerButton をクリックすると、DialogHost が Button.CommandParameter の構造で表示されます。これに関する問題は、ダイアログがオンになっている間、ウィンドウが「無効」にならないことです (少し黒くなり、クリックできなくなります)。
この動作を実現するには、DialogHost 内のウィンドウのすべてのコンテンツが必要であることがわかりました。しかし、それは本当にそうですか、それとも私は何かを誤解していますか? バックグラウンドで他のものが実行されているように見えるため、彼らの例 (リンクを参照) はあまり役に立ちません。また、「最上位ダイアログホスト」を開いているボタンのコマンド materialDesign:DialogHost.OpenDialogCommand は私に限定されているようです。