D'abord, ne le faites pas en code-behind. Vous combattez le cadre avec cette façon de faire les choses. WPF est conçu différemment; vous devez penser en termes de la façon dont le cadre veut que vous fassiez des choses. Dans le cas de WPF, il s'agit des classes XAML markup + converter.
Vous avez besoin de deux choses pour obtenir ce que vous voulez:
- balisage XAML approprié pour configurer le style de la DataGrid
- de mise en œuvre d'un IValueConverter pour traduire la valeur du texte en couleur de surlignage appropriée.
Ici va:
XAML dans votre Datagrid
La première chose que vous voulez faire est de définir le XAML nécessaire pour coiffer vos cellules DataGrid. Il ressemble à ceci:
<toolkit:DataGrid.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Setters>
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.Text, Converter={StaticResource dataGridCellConverter}}" />
</Style.Setters>
</Style>
</toolkit:DataGrid.CellStyle>
Ce que cela fait est la mise en place d'une liaison au RelativeSource (le DataGridCell) et lui demander de changer la Content.Text de la cellule que la valeur de passer au convertisseur (dataGridCellConverter).
IValueConverter
La prochaine chose que vous avez besoin est une implémentation IValueConverter pour déterminer réellement les couleurs sur la base du texte de la cellule:
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace UserControls.Utility.Converters
{
public class DataGridCellConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return Colors.White.ToString();
if (value.ToString().ToUpper().Contains("CMS")) return "LIME";
return "ORANGE";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Ici, je suis à la recherche du texte "CMS" et colorant la cellule de fond; Si "CMS" n'existe pas, il renvoie la couleur orange à la place.
Précisez les ressources
Maintenant, vous devez ajouter des balises dans votre fenêtre/usercontrol pour spécifier le convertisseur comme une ressource appropriée:
<UserControl.Resources>
<Converters:DataGridCellConverter x:Key="dataGridCellConverter"/>
</UserControl.Resources>
Et cela devrait le faire! Bonne chance.
+1 - réponse très détaillée – David
'Dans le cas de WPF, il s'agit des classes XAML markup + converter.' - C'est vraiment votre perception personnelle –