По вашему вопросу я не могу сказать, добавляете ли вы столбцы в сетку во время выполнения, но в любом случае вы можете добавить CellStyle в сетку во время разработки, которая обрабатывает ваши конкретные потребности в стилях с помощью DataTriggers.
Например, следующее сделало бы все строки красными, где свойство Name = "Billy Bob":
<DataGrid AutoGenerateColumns="True" Name="dataGrid1">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding Name}" Value="Billy Bob" >
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
Если вы добавляете столбцы программным способом во время выполнения и хотите применить к ним определенный стиль, вы все равно можете определить эти стили во время разработки в своем xaml.
<DataGrid AutoGenerateColumns="False" Name="dataGrid1">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}" x:Key="MyCellStyle">
<Setter Property="Foreground" Value="Green"/>
</Style>
</DataGrid.Resources>
...
Затем, когда вы добавляете столбцы, вы можете применить к ним этот стиль:
col.CellStyle = (Style)dataGrid1.Resources("MyCellStyle");
Обновление
Если у вас есть список песен и вы хотите изменить цвет строки каждой песни, в которой есть исполнитель, имя которого начинается с «a», то вы можете использовать IValueConverter.
Следующий конвертер поможет:
public class ArtistNameConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
try
{
return value.ToString().StartsWith(parameter.ToString());
}
catch
{
return false;
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Тогда вы можете использовать конвертер в вашем xaml следующим образом:
<DataGrid AutoGenerateColumns="True" Name="dataGrid1">
<DataGrid.Resources>
<converters:ArtistNameConverter x:Key="ArtistNameConverter"></converters:ArtistNameConverter>
</DataGrid.Resources>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding ArtistName, Converter={StaticResource ArtistNameConverter}, ConverterParameter=a}" Value="True" >
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
Обратите внимание, как я передаю "а" в преобразователь в качестве параметра. Вы можете передать любую нужную букву, и строки, в которых есть исполнители, начинающиеся с этой буквы, будут иметь цвет фона, заданный красным.
Обновление 2
Если вы хотите передать какую-то переменную конвертеру, вы можете использовать MultiBinding.
Конвертер будет выглядеть так:
public class ArtistNameConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
try
{
return values[0].ToString().StartsWith(values[1].ToString());
}
catch
{
return false;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Первый передаваемый параметр - имя исполнителя, второй - буква.
И вы бы использовали его в своей сетке так:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Value="True" >
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource ArtistNameConverter}">
<Binding Path="ArtistName" />
<Binding Mode="OneWay" ElementName="FirstLetter" Path="Text" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
В этом примере первая буква исходит от свойства «Text» элемента управления «FirstLetter». Вы можете изменить эту привязку на что угодно.