C#WPF Datagrid为代码隐藏的单元格着色

时间:2016-12-07 09:28:42

标签: c# wpf colors datagrid

我的项目中有一个DataGrid,其中一些列是带有PropertyDataBinding的文件。

<DataGrid x:Name="dataOutOfDb" Grid.Row="1" MaxHeight="500" AutoGenerateColumns="False" ItemsSource="{Binding Source=ZeichnungCollection}" Margin="47,10,1299,0" SelectionChanged="dataOutOfDb_SelectionChanged" CanUserAddRows="False" Grid.ColumnSpan="2" MouseDoubleClick="dataOutOfDb_MouseDoubleClick" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Zeichnungsnummer" Binding="{Binding AddColumnZeichnungsnummer, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="Index" Binding="{Binding AddColumnIndex, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="V-ID" Binding="{Binding AddColumnVolanteIndex, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="Änderung Intern" Binding="{Binding AddColumnAenderungIntern, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="Änderung Extern" Binding="{Binding AddColumnAenderungExtern, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="Dateiendung" Binding="{Binding AddColumnExtension, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
        <DataGridTextColumn Header="Status" Binding="{Binding AddColumnStatus, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

现在我想要最后一列&#34; Status&#34;具有颜色取决于状态本身。就像那样,只有行中的细胞是绿色或红色。

属性的类是ISerializable,属性填充如下:

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
    this.GetObjectData(info, context);
    info.AddValue("AddColumnZeichnungsnummer", Zeichnungsnummer, typeof(string));
    info.AddValue("AddColumnIndex", Index, typeof(string));
    info.AddValue("AddColumnVolanteIndex", Volante_Index, typeof(int));
    info.AddValue("AddColumnAenderungIntern", Aenderung_Int, typeof(string));
    info.AddValue("AddColumnAenderungExtern", Aenderung_Ext, typeof(string));
    info.AddValue("AddColumnExtension", Extension, typeof(string));
    info.AddValue("AddColumnStatus", Status, typeof(string));
}

有人知道如何使用颜色设置状态单元格吗?

2 个答案:

答案 0 :(得分:1)

这个问题在wpf Datagrid世界中很常见,我建议你参考这个主题Change DataGrid cell colour based on values,其中@H.B.如何以正确的方式做出相关答案。

答案 1 :(得分:0)

  

我尝试了直接背景绑定;它不会导致任何错误,但单元格不会改变颜色

使用背景设定器定义CellStyle将更改单元格的背景:

<DataGridTextColumn Header="Status" Binding="{Binding AddColumnStatus, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

如果要根据AddColumnStatus属性的值设置单元格的Background属性,则需要为此属性可能具有的每个可能值指定DataTrigger。以下示例标记将在AddColumnStatus属性返回“YourStatusA”时将Background属性设置为绿色,并在返回“YourStatusB”时将其设置为Red:

<DataGridTextColumn Header="Status" Binding="{Binding AddColumnStatus, UpdateSourceTrigger=LostFocus}" Width="Auto" IsReadOnly="True">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Background" Value="Yellow" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding AddColumnStatus}" Value="YourStatusA">
                    <Setter Property="Background" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding AddColumnStatus}" Value="YourStatusB">
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

另请注意,如果您打算在运行时动态更改AddColumnStatus属性的值并希望更新单元格中的颜色,则定义AddColumnStatus属性的类应实现INotifyPropertyChanged接口并引发更改通知:{ {3}}