Lo primero es lo primero, no haga esto en código subyacente. Estás luchando contra el marco con esta forma de hacer las cosas. WPF está diseñado de manera diferente; tienes que pensar en términos de cómo el marco quiere que hagas cosas. En el caso de WPF, se trata de las clases XAML markup + converter.
se necesitan dos cosas para lograr lo que quiere:
- apropiado marcado XAML para configurar el estilo de la cuadrícula de datos
- aplicación Un IValueConverter para traducir el valor del texto en color de realce adecuado.
aquí va:
XAML en su cuadrícula de datos
La primera cosa que quiero hacer es definir el XAML necesario para el estilo de sus células DataGrid. Se ve así:
<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>
Lo que esto hace es la creación de una unión a la RelativeSource (el DataGridCell) y diciéndole que la utilice el Content.Text de la célula como el valor para pasar al convertidor (dataGridCellConverter)
IValueConverter
La próxima cosa que necesita es una implementación IValueConverter para determinar realmente los colores basados en el texto de la celda:
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();
}
}
}
Aquí, sólo estoy buscando el texto "CMS" y coloreando la celda de fondo; si "CMS" no existe, entonces devuelve el color naranja en su lugar.
Especificar Recursos
Ahora, es necesario añadir marcado en la ventana/control de usuario para especificar el convertidor como un recurso adecuado:
<UserControl.Resources>
<Converters:DataGridCellConverter x:Key="dataGridCellConverter"/>
</UserControl.Resources>
y que debe hacerlo! Buena suerte.
+1 - respuesta muy detallada – David
'En el caso de WPF, es XAML marcado + clases de conversión.' - esta es tu opinión personal muy –