C#WPF Datagrid使用代码隐藏对单元格着色
我的项目中有一个DataGrid,其中一些列是用PropertyDataBinding填充的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 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>