How to set DataGridTextColumn text color?
You need to specify a Style with a DataTrigger for the column's CellStyle. e.g.
<Page.Resources> <Style TargetType="DataGridCell" x:Key="ActiveCellStyle"> <Setter Property="Foreground" Value="Blue"/> <Style.Triggers> <DataTrigger Binding="{Binding IsActive}" Value="{x:Null}"> <Setter Property="Foreground" Value="Green"/> </DataTrigger> <DataTrigger Binding="{Binding IsActive}" Value="True"> <Setter Property="Foreground" Value="Red"/> </DataTrigger> </Style.Triggers> </Style> <Converters:BoolToTextConverter x:Key="BoolToStatusConverter" TargetCondition="True" IsMatchValue="It's active" IsNotMatchValue="It's dead" /></Page.Resources><Grid> <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Status" Binding="{Binding IsActive, Converter={StaticResource BoolToStatusConverter}}" CellStyle="{StaticResource ActiveCellStyle}"/> </DataGrid.Columns> </DataGrid></Grid>
While not technically a DataGridTextColumn, this is what I usually do:
<DataGridTemplateColumn Header="Status" SortMemberPath="Status"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToSolidColor}}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>
I get the datacontext that I want, and I can resuse converters that I may already have in place in the rest of the application. Futhermore, I don't have to hard code / maintain an extra set of styles and data triggers to get the desired effect.
Foreground is a Brush, not a Color. It can parse a color in XAML, but that's not used when you create a binding with a converter.
Use a BoolToBrushConverter, or create a SolidColorBrush as the foreground and bind its "Color" property to the BoolToColorConverter. Like so:
<DataGridTextColumn Header="Status"> <DataGridTextColumn.Foreground> <SolidColorBrush Color="{Binding Path=IsActive, Converter={StaticResource BoolToColorConverter}}" /> </DataGridTextColumn.Foreground></DataGridTextColumn>