C#WPF Datagrid使用代码隐藏对单元格着色

C#WPF Datagrid使用代码隐藏对单元格着色,c#,wpf,colors,datagrid,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_Selection

我的项目中有一个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>

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

这个问题在wpf Datagrid世界中非常常见,我建议您参考这个主题,@H.B.给出了如何正确设置状态单元格的相关答案

我试过了,直接背景装订出来;它不会导致任何错误,但单元格不会改变颜色

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

<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属性的值设置单元格的背景属性,则需要为此属性可能具有的每个可能值指定DataTrigger。以下示例标记将在AddColumnStatus属性返回“YourStatusA”时将背景属性设置为绿色,在返回“YourStatusB”时将背景属性设置为红色:



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

感谢您提供了非常好的链接。我试过了,直接背景装订出来;它不会导致任何错误,但单元格不会更改颜色。“您必须在颜色所依赖的属性设置器中触发属性更改通知。”您注意到这一部分了吗?您必须添加OnPropertyChanged(“NameBrush”);在您的状态设置器中是的,我在中读到,我试图添加OnPropertyChanged(…),但我无法在设置器中调用此方法。你知道我做错了什么吗?谢谢你的回答,我不知道这是不是最好的方法,但这似乎是最简单的方法。在编辑状态时,我只需要记下一个注意事项来更正xaml代码。使用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>
<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>