繁体   English   中英

C# WPF - ListViewItem 无法更改背景颜色

[英]C# WPF - ListViewItem cannot change background color

更改前景是可能的并且它的工作,但是如果我更改背景或 BorderBrush 没有任何反应(默认蓝色背景颜色) 这是我的 ListView xaml 代码,我错过了什么吗?

        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Resources>
                    <Style TargetType="{x:Type Border}">
                        <Setter Property="CornerRadius" Value="20"/>
                    </Style>
                </Style.Resources>

                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="Margin" Value="10, 5, 10, 0"/>
                <Setter Property="Height" Value="67" />
                <Setter Property="Width" Value="500"/>
                <Setter Property="Background" Value="#FFD9D9D9"/>

                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="true">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
                                                                 

您需要复制默认模板并对其进行编辑才能更改背景颜色:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="CornerRadius" Value="20"/>
            </Style>
        </Style.Resources>

        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="Margin" Value="10, 5, 10, 0"/>
        <Setter Property="Height" Value="67" />
        <Setter Property="Width" Value="500"/>
        <Setter Property="Background" Value="#FFD9D9D9"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <ControlTemplate.Resources>
                        <Style x:Key="FocusVisual">
                            <Setter Property="Control.Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Rectangle Margin="2" StrokeDashArray="1 2" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" SnapsToDevicePixels="true" StrokeThickness="1"/>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                        <SolidColorBrush x:Key="Item.MouseOver.Background" Color="#1F26A0DA"/>
                        <SolidColorBrush x:Key="Item.MouseOver.Border" Color="#a826A0Da"/>
                        <SolidColorBrush x:Key="Item.SelectedActive.Background" Color="#3D26A0DA"/>
                        <SolidColorBrush x:Key="Item.SelectedActive.Border" Color="#FF26A0DA"/>
                        <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
                        <SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
                    </ControlTemplate.Resources>
                    <Border x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsMouseOver" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.MouseOver.Background}"/>
                            <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.MouseOver.Border}"/>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                <Condition Property="IsSelected" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Background}"/>
                            <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Border}"/>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Selector.IsSelectionActive" Value="True"/>
                                <Condition Property="IsSelected" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Background}"/>
                            <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
                        </MultiTrigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListView.ItemContainerStyle>

查看模板中的SolidColorBrush资源并根据您的要求进行编辑。

由于默认模板的定义方式,直接在Style中使用Trigger将不起作用。 请参阅博客文章了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM