【问题标题】:WPF: How to highlight all the cells of a DataGrid meeting a condition?WPF:如何突出显示满足条件的 DataGrid 的所有单元格?
【发布时间】:2009-11-19 06:55:48
【问题描述】:

(wpftoolkit)数据网格通常表示对象的集合,其中行表示每个对象,列表示相应的属性。

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

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

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    一种方法是创建一个以相应方式运行的数据单元格模板(通过 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>
    

    如果它位于数据模板中,边框元素的数据上下文将是包含的对象,并且边框触发器将在内容的“突出显示”属性时触发(假设内容是具有“突出显示”布尔值的类属性)为“真”。

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

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

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

    【讨论】:

      最近更新 更多