为列表视图中的项着色

本文关键字:列表 视图 | 更新日期: 2023-09-27 17:50:37

好吧,因为我是WPF的新手,我可能会问一个简单的问题,但我在过去的5个小时里一直在寻找解决方案,但一无所获。
我有一个类,它包含一个bool值,指示ListView行是否应该着色。
我正在绑定其余列的值,但由于没有颜色列,我一直在试图找出如何做到这一点。

我尝试了Style s,尝试了DataTemplate s(我花了一些时间来理解把它们放在哪里,但我弄清楚了)和c#代码中的函数的一些选项,我不知道如何调用。

我知道我可能没有给足够的信息或任何代码,但让我知道你需要什么来帮助我,我会张贴它,我很抱歉,但我是新的,所以我甚至不知道你需要什么。

这是我正在使用的类:

        public class ReportRow
{
    public string ProductID { get; set; }
    public int SideA { get; set; }
    public int SideB { get; set; }
    public string Workers { get; set; }
    public bool Equality { get; set; }
}

一切都显示在ListView中,除了应该指示行是否应该着色的bool。

这是我使用的ListView:

            <ListView Height="118" HorizontalAlignment="Right" Name="ReportView" VerticalAlignment="Top" Width="390" HorizontalContentAlignment="Right" Grid.Row="1" ItemsSource="{Binding ReportRows}" >
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn Header="Product" Width="60" DisplayMemberBinding="{Binding ProductID}" />
                    <GridViewColumn Header="SideA" Width="60" DisplayMemberBinding="{Binding SideA}"/>
                    <GridViewColumn Header="SideB" Width="60" DisplayMemberBinding="{Binding SideB}"/>
                    <GridViewColumn Header="Workers" DisplayMemberBinding="{Binding Workers}"/>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

为列表视图中的项着色

你可以使用ItemContainerStyle-property:

为listviewitem上色
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Equality}" Value="true">
                        <Setter Property="Background" Value="ColorWhenTrue"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=Equality}" Value="false">
                        <Setter Property="Background" Value="ColorWhenFalse"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>

我试试用Converter

    public class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool && (bool)value)
            return new SolidColorBrush(Colors.Red);
        else
            return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<Window.Resources>
    <conv:BoolToColorConverter x:Key="boolToColorConverter"/>
</Window.Resources>
 <GridViewColumn Header="Product" Width="60" DisplayMemberBinding="{Binding ProductID}" BackGround="{Binding Equality, Converter={StaticResource boolToColorConverter}}" />

我希望这能给你一个想法。

这里是一个项目的链接,它展示了我相信你正在寻找的东西:http://www.codeproject.com/Articles/18585/Highlighting-Items-in-a-WPF-ListView。您将需要更改转换器代码的代码,因为您的属性是布尔值而不是整数,并更改绑定到您的属性名称。