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

2023-07-19  本文已影响0人  达哥傻乐
<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 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值为真的项目显示为红色
上一篇下一篇

猜你喜欢

热点阅读