美文网首页
WPF如何使ListView中的选定项目变色或根据绑定数据属性显

WPF如何使ListView中的选定项目变色或根据绑定数据属性显

作者: 达哥傻乐 | 来源:发表于2023-07-19 15:56 被阅读0次
    • 在ListView中自定义了模板,想让选定的项目的内容变成想要的颜色。
      下面以如下的自定义模板为例说明:
    <ListView.ItemTemplate>
        <DataTemplate>
            <WrapPanel Orientation="Vertical" Margin="4 " >
                <Grid Height="2" Background="YellowGreen"/>
                <TextBlock Text="{Binding Path=EName}" ToolTip="{Binding EName}" FontWeight="Bold" TextAlignment="Left" Width="150" >
                    <TextBlock.Style>
                        <Style TargetType="TextBlock">
                            <Setter Property="Foreground" Value="DarkBlue"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="True">
                                    <Setter Property="Foreground" Value="Red"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>
                <TextBlock Text="{Binding Path=CName}" ToolTip="{Binding CName}" FontWeight="Bold" TextAlignment="Left" Width="150" >
                    <TextBlock.Style>
                        <Style TargetType="TextBlock">
                            <Setter Property="Foreground" Value="DarkBlue"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="True">
                                    <Setter Property="Foreground" Value="Red"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
    
                </TextBlock>
                <TextBlock Text="{Binding Path=Dept, StringFormat=Dept: {0}}" TextAlignment="Left" Width="150"/>
                <TextBlock Text="{Binding Path=ExtNo, StringFormat=Ext: {0}}" TextAlignment="Left" Width="150"/>
                <TextBlock Text="{Binding Path=MobileNo, StringFormat=Mobile: {0}}" TextAlignment="Left" Width="150"/>
            </WrapPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
    

    重点在下面的部分:

    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="DarkBlue"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="True">
                    <Setter Property="Foreground" Value="Red"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
    

    效果如图所示,可见中间选定的项目的颜色变成了指定的红色,而两边未选定的内容是默认的深蓝色:


    图1. 效果演示
    • 想让ListView的显示项目根据绑定数据的属性变色
      下面以ListViewItem根据绑定的数据的Changed属性来变色,如果这个值为真则显示为红色字体。
    <ListView x:Name="lvSelectedRoles" ItemsSource="{Binding ElementName=lvUsers, Path=SelectedItem.SelectedRoles}" DisplayMemberPath="Code" SelectionChanged="lvSelectedRoles_SelectionChanged">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Changed}" Value="True">
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                </Style.Triggers>
                <Setter Property="ToolTip" Value="{Binding Name}"/>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
    

    效果如下图,Changed值为真的项目显示为红色:


    图2. 效果演示:Changed值为真的项目显示为红色

    相关文章

      网友评论

          本文标题:WPF如何使ListView中的选定项目变色或根据绑定数据属性显

          本文链接:https://www.haomeiwen.com/subject/ycxaudtx.html