为列表视图中的项着色
本文关键字:列表 视图 | 更新日期: 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。您将需要更改转换器代码的代码,因为您的属性是布尔值而不是整数,并更改绑定到您的属性名称。