DockPanel 内に ListView があります。ListView を水平方向に引き延ばし、DockPanel 内で垂直方向に中央揃えにする必要があります。ListView が無効になっている場合 (IsEnabled=false)、DockPanel の背景を無効な ListView の背景色に合わせて変更する必要があります。
なので、基本的には下の写真のような状況は避けたいと思っています。
<Window>
<DockPanel IsEnabled="False">
<ListView IsEnabled="False" VerticalAlignment="Center" HorizontalContentAlignment="Center">
<ListViewItem Content="AAA"/>
<ListViewItem Content="BBB"/>
<ListViewItem Content="CCC"/>
</ListView>
</DockPanel>
</Window>
ただし、コード内のどこでも色を明示的に宣言したくありません。なぜなら、異なる Windows 環境で ListView がどのような背景色を使用するのかがわからないからです (よくわかりませんが、Windows のテーマ/色が異なると思います)。設定は、ListView のデフォルトの背景色を変更できます。これは、明示的に宣言したくない色とは異なる可能性があります)。
ListView の背景色を DockPanel の背景色にバインドしても機能しません。
そのため、現在、次の回避策を使用しています。
<DockPanel.Style>
<Style TargetType="{x:Type DockPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=parametersListView, Path=IsEnabled}" Value="False">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DockPanel.Style>
ListView がその ControlTemplate で使用しているリソース キーを抽出しました。テンプレートには、IsEnabled プロパティで宣言された Trigger があり、コントロールの背景色を SystemColors.ControlBrushKey キーで表される色に設定します。
これは機能しているようですが、これが正しい方法であるかどうかはわかりません。
これをより堅牢な方法で行う方法はありますか、それともこれが最善の方法ですか?
(補足: SystemColors.ControlBrushKey の代わりに SystemColors.ControlBrush を使用すると、別のグレーの色合いが生成されますが、その理由はわかりません。)