You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListView选中项内Grid背景色切换失效,求解决方案

解决ListView项选中时Grid背景色不变化的问题

你的代码存在几个关键问题导致选中状态不生效,以下是修正方案:

问题分析

  1. 硬编码背景色覆盖样式:Grid直接设置了Background="White",强制覆盖了选中状态的样式值。
  2. 资源语法错误与键值不匹配:你定义的ListViewItemBackgroundUnselected存在语法错误(Color后缺少=),且默认资源键无法直接作用于DataTemplate内的Grid。
  3. UserControl隔离状态传递:嵌套的UserControl阻断了ListViewItem的选中状态向内部Grid的传递,属于多余嵌套。

修正后的代码

方案1:通过DataTrigger绑定选中状态(推荐)

直接在Grid上绑定父级ListViewItem的选中状态,动态切换背景色:

<ListView
    x:Name="kategoriListView"
    Margin="35,20,30,20"
    VerticalAlignment="Stretch"
    AutomationProperties.AutomationId="ItemsListView"
    AutomationProperties.Name="Items"
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    CornerRadius="15">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid
                x:Name="grid"   
                HorizontalAlignment="Stretch" 
                Height="50"
                CornerRadius="15">
                <TextBlock
                    x:Name="kelasText"
                    Margin="10,0,0,0"
                    VerticalAlignment="Center"
                    FontSize="17"
                    FontWeight="Bold"
                    Foreground="Black"
                    Text="{Binding KategoriList}" />
                <Grid.Style>
                    <Style TargetType="Grid">
                        <Setter Property="Background" Value="White"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="True">
                                <Setter Property="Background" Value="Blue"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Grid.Style>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

方案2:重写ListViewItem模板实现全局样式

如果需要统一所有列表项的选中样式,可以重写ListViewItem的默认模板:

<ListView
    x:Name="kategoriListView"
    Margin="35,20,30,20"
    VerticalAlignment="Stretch"
    AutomationProperties.AutomationId="ItemsListView"
    AutomationProperties.Name="Items"
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    CornerRadius="15">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid
                x:Name="grid"   
                HorizontalAlignment="Stretch" 
                Height="50"
                CornerRadius="15"
                Background="{TemplateBinding Background}">
                <TextBlock
                    x:Name="kelasText"
                    Margin="10,0,0,0"
                    VerticalAlignment="Center"
                    FontSize="17"
                    FontWeight="Bold"
                    Foreground="Black"
                    Text="{Binding KategoriList}" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.Resources>
        <Style TargetType="ListViewItem">
            <Setter Property="Background" Value="White"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Border
                            Background="{TemplateBinding Background}"
                            CornerRadius="15"
                            Padding="0">
                            <ContentPresenter />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="Blue"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>
</ListView>

关键修正点

  • 移除多余的UserControl,让Grid能接收ListViewItem的状态传递
  • 取消Grid的硬编码背景色,改用样式触发器或模板绑定动态切换
  • 通过RelativeSource绑定父级ListViewItem的IsSelected属性,实现状态联动

内容的提问来源于stack exchange,提问作者cielo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:10:13