我的项目中有一个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));
}
有人知道如何使用颜色设置状态单元格吗?
答案 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}}