How to set DataGridTextColumn text color? How to set DataGridTextColumn text color? wpf wpf

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>