我在 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>
但是,我不想在代码中的任何地方显式声明颜色,因为我不知道 ListView 在不同的 Windows 环境中将使用哪种背景颜色(我不确定,但我猜不同的 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.ControlBrush 而不是 SystemColors.ControlBrushKey 会产生不同的灰色阴影,我不知道为什么。)