WPF:如何突出显示满足条件的DataGrid的所有单元格?

WPF:如何突出显示满足条件的DataGrid的所有单元格?,wpf,datagrid,Wpf,Datagrid,(wpftoolkit)数据网格通常表示一组对象,其中行表示每个对象,列表示重复属性 我不是这样用的。我用它来表示两个集合之间的“交集”。行表示集合A中的对象,列表示集合B中的对象。x,y处的单元格表示fn中的某个值(collectionA[x],collectionB[y]) 这个很好用。现在我希望能够查询单元格值。我希望用户能够做一些事情,比如高亮显示值大于0的所有单元格? 如何使用datagrid实现这一点 一种方法是创建以相应方式运行的数据单元模板(通过controltemplates.

(wpftoolkit)数据网格通常表示一组对象,其中行表示每个对象,列表示重复属性

我不是这样用的。我用它来表示两个集合之间的“交集”。行表示集合A中的对象,列表示集合B中的对象。x,y处的单元格表示fn中的某个值(collectionA[x],collectionB[y])

这个很好用。现在我希望能够查询单元格值。我希望用户能够做一些事情,比如高亮显示值大于0的所有单元格?
如何使用datagrid实现这一点

一种方法是创建以相应方式运行的数据单元模板(通过controltemplates.triggers集合)

另一种方法是创建数据单元样式,并在给定绑定具有特定值时使用样式触发器设置背景(通过style.triggers集合)

或者您可以使用混合方法

在数据单元模板中,可能有一个包含所有内容的边框元素。例如,可以为该边框元素创建内联样式

<Border Width="Auto" Height="Auto" Padding="6,10,6,10" CornerRadius="0,0,20,20">
    <Border.Style>
        <Style TargetType="{x:Type Border}" >
            <Setter Property="Background" Value="White" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Highlighted}" Value="True">
                    <Setter Property="Background" Value="{StaticResource GreenGradientSuccessBrush}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>    
    </Border.Style>
</Border>

如果它位于数据模板中,则border元素的datacontext将是包含的对象,并且当内容的“Highlighted”属性(假设内容是具有“Highlighted”布尔属性的类)为“True”时,将触发border触发器

如果您的内容是一个整数,并且希望触发器在大于零时触发,则必须使用

<DataTrigger Binding="{Binding, Converter={StaticResource GreaterThanZeroConverter}}" Value="True">


其中,GreaterThanZeroConverter是一个合适的值转换器。

一种方法是创建一个以相应方式运行的数据单元模板(通过controltemplates.triggers集合)

另一种方法是创建数据单元样式,并在给定绑定具有特定值时使用样式触发器设置背景(通过style.triggers集合)

或者您可以使用混合方法

在数据单元模板中,可能有一个包含所有内容的边框元素。例如,可以为该边框元素创建内联样式

<Border Width="Auto" Height="Auto" Padding="6,10,6,10" CornerRadius="0,0,20,20">
    <Border.Style>
        <Style TargetType="{x:Type Border}" >
            <Setter Property="Background" Value="White" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Highlighted}" Value="True">
                    <Setter Property="Background" Value="{StaticResource GreenGradientSuccessBrush}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>    
    </Border.Style>
</Border>

如果它位于数据模板中,则border元素的datacontext将是包含的对象,并且当内容的“Highlighted”属性(假设内容是具有“Highlighted”布尔属性的类)为“True”时,将触发border触发器

如果您的内容是一个整数,并且希望触发器在大于零时触发,则必须使用

<DataTrigger Binding="{Binding, Converter={StaticResource GreaterThanZeroConverter}}" Value="True">

其中大于零的转换器是合适的值转换器