【问题标题】:Coloring an item in a listview为列表视图中的项目着色
【发布时间】:2013-01-04 14:05:49
【问题描述】:

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

我尝试了Styles,尝试了DataTemplates(我花了一些时间来理解将它们放在哪里,但我想通了)和一些我不知道的 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 中,除了应该指示行是否应该着色的布尔值。

更新

这是我正在使用的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>

这是我目前拥有的。

【问题讨论】:

  • 请显示您正在使用的 XAML
  • 我如何才能看到它适用于我的班级而不是该示例中的水果班级?
  • 它工作正常!谢谢,将其发布为答案,以便我可以接受其他所有人谢谢!

标签: c# wpf listview


【解决方案1】:

您可以使用 ItemContainerStyle-property 为您的 ListViewItems 着色:

        <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>

【讨论】:

    【解决方案2】:

    你好用转换器试试

        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}}" />
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 首先谢谢你,我已经看到了这个选项,但我被代码纠缠了。我没有把我在这个例子上坐了 45 分钟的东西放在哪里,但没有任何效果。
      • 您对哪些部分感到困惑?转换器只是您添加到项目中的一个类。数据触发器样式代码可以放在 或单独的资源文件中。你下载项目了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多