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

时间:2009-11-19 06:55:49

标签: wpf datagrid

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

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

这很好用。现在我希望能够查询单元格值。我希望用户能够突出显示值大于0的所有单元格? 如何使用datagrid执行此操作?

1 个答案:

答案 0 :(得分:1)

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

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

或者您可以使用混合方法。

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

<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将是包含的对象,并且当内容的“突出显示”属性时,边界触发器将触发(假设内容是具有“突出显示”布尔值的类(属性)是“真实的”。

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

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

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