0

我在 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 会产生不同的灰色阴影,我不知道为什么。)

4

2 回答 2

0

为什么不使用 LstFilledChild =true

编辑:如果你命名你的元素并在绑定中使用 ElementName 它应该可以工作。

<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{Binding Background, ElementName=myList}">
    <ListView Name="myList"  IsEnabled="False" HorizontalAlignment="Center" HorizontalContentAlignment="Center" >
        <ListViewItem>AAA</ListViewItem>
    </ListView>
</DockPanel>
于 2013-03-22T12:27:24.967 回答
0

自从我问了我的问题后,我正在处理的应用程序是实时的,它使用的是我最初提出的解决方案,如下所示。目前效果很好。

<Window>
    <DockPanel IsEnabled="False">
        <DockPanel.Style>
            <Style TargetType="{x:Type DockPanel}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=myListView, Path=IsEnabled}"
                                 Value="False">
                        <Setter Property="Background"
                                Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DockPanel.Style>
        <ListView IsEnabled="False" 
                  VerticalAlignment="Center" 
                  HorizontalContentAlignment="Center"
                  x:Name="myListView"
                  x:FieldModifier="private">
            <ListViewItem Content="AAA"/>
            <ListViewItem Content="BBB"/>
            <ListViewItem Content="CCC"/>
        </ListView>
    </DockPanel>
</Window>
于 2013-04-04T04:22:02.127 回答