在ListView中更改GridView行的背景颜色

3

我有如下列表视图:

<ListView x:Name="lvLedger" 
              Height="{Binding Path=GridHight, ElementName=ledgerList}" 
              Width="{Binding Path=GridWidth, ElementName=ledgerList}" 
              ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
              ScrollViewer.VerticalScrollBarVisibility="Auto" 
              ItemsSource="{Binding}" 
              BorderThickness="0" 
              Background="Transparent" 
              BorderBrush="Transparent" 
              DataContextChanged="lvLedger_DataContextChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn x:Name="c2ServiceDate" Header="Service Date" Width="82" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=servicedate}"  
                                ToolTipService.ShowDuration="60000" 
                                ToolTipService.InitialShowDelay="0" 
                                ToolTip="{Binding Path=type}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn x:Name="c3CPT" Header="Code" Width="50">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=cpt}"  
                                ToolTipService.ShowDuration="60000" 
                                ToolTipService.InitialShowDelay="0" 
                                ToolTip="{Binding Path=type}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
        <!--More columns here-->        </GridViewColumn></GridView></ListView.View></ListView>

我希望能够根据服务日期和代码的组合更改一行的背景颜色。 所以,我可能有3行具有相同的服务日期和代码,应该具有相同的背景,接着是2行具有不同的颜色,然后基于相同规则交替更改背景颜色。 ItemSource从外部控件绑定到数据视图。 我真的不知道如何做到这一点,任何帮助将不胜感激。
1个回答

2

你可以在绑定行(线)的类/模型中添加一个ColorProperty。这样,你已经有了日期和数字。一旦设置它们,也要设置颜色,现在无需转换器,你只需要触发该属性即可:

<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="Border" SnapsToDevicePixels="true">
                        <GridViewRowPresenter VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
                        <Border.Style>
                            <Style TargetType="Border">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ColorProperty}" Value="Blue">
                                        <Setter Property="Background" Value="Blue"/>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding ColorProperty}" Value="Red">
                                        <Setter Property="Background" Value="Red"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Border.Style>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style> 

这让我接近了我需要的地方。由于我已经在资源字典中设置了 <Style TargetType="{x:Type ListViewItem}" > 的样式,所以我必须修改该字典。如果您知道一种添加样式的方法,那就更好了。 - TriStar
要添加到样式中,可以使用BasedOn属性,它基本上会获取旧样式并对其进行添加或扩展: <Style x:Key="newAdditionalModification" TargetType="ListViewItem" BasedOn="{StaticResource YourBaseListViewItemStyle}"> - denis morozov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接