WPF DataGrid - 基于隐藏值的不同单元格颜色

时间:2014-11-04 01:02:07

标签: c# wpf datagrid

我正在努力加快如何在DataGrid上使用DataTriggers。

我的数据表中有四列(节点,名称,值,标志)。 Flag是数据网格中的隐藏列。

当Flag = 2时,我会让DataGridRow具有PaleGreen背景,但Value列应为红色。我知道我可以为flag列创建一个样式,因为这不可见,这没有用。

很抱歉,如果这是一个新手问题。首次从WinForms进军wpf。

到目前为止我所拥有的:

<Style TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Flag}" Value="2">
                <Setter Property="Background" Value="PaleGreen" />
                <Setter Property="Foreground" Value="Black" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Flag}" Value="3">
                <Setter Property="Background" Value="CadetBlue" />
                <Setter Property="Foreground" Value="White" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

1 个答案:

答案 0 :(得分:2)

想出来。完整性代码

<UserControl.Resources>
<Style TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Flag}" Value="2">
                <Setter Property="Background" Value="PaleGreen" />
                <Setter Property="Foreground" Value="Black" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Flag}" Value="3">
                <Setter Property="Background" Value="CadetBlue" />
                <Setter Property="Foreground" Value="White" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="DataGridCell" x:Key="ValueColumn">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Flag}" Value="2">
                <Setter Property="Background" Value="Red" />
                <Setter Property="Foreground" Value="White" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<DataGrid>
    <DataGrid.Columns>
                <DataGridTextColumn Header="Node" Binding="{Binding Path=Node}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
                <DataGridTextColumn MinWidth="300" Header="Value" Binding="{Binding Path=Value}" CellStyle="{StaticResource ValueColumn}"/>
                <DataGridTextColumn Header="Flag" Binding="{Binding Path=Flag}" Visibility="Hidden" />
     </DataGrid.Columns>
</DataGrid>