Tuve este mismo problema y lo resolví después de hacer una prueba mínima y un poco de razonamiento deductivo.
Básicamente, la solución es SIEMPRE asegúrese de configurar el color de fondo (o cualquier estilo, de hecho). No asuma ningún valor predeterminado para el diseño de filas. Estaba asumiendo un valor por defecto de blanco, que es una suposición razonable pero en realidad no fue el caso.
Más detalles:
Parece que el tiempo de ejecución reutiliza instancias de la clase Fila cuando la prestación de múltiples filas. No he verificado esto en absoluto, pero a juzgar por los síntomas, parece que eso debe estar sucediendo.
Tenía solo una o dos filas que deberían colorearse de forma diferente. Estaba viendo filas coloreadas al azar cuando me desplazo hacia arriba y hacia abajo.
Aquí está mi clase de prueba que hice. Se supone que cada quinta fila es roja y cursiva.
Verá un par de líneas comentadas (que establecen un fondo predeterminado que no es en cursiva y en blanco). Con estos comentarios, si te desplazas hacia arriba y hacia abajo verás un montón de rojo. Esto se debe a que los objetos de la fila se están reutilizando. Si reduce la ventana y luego la maximiza, parte del blanco volverá. Probablemente el recolector de basura recolecte las filas; no cree que necesite más después de haber reducido la ventana.
Como dije anteriormente, la solución es especificar siempre los estilos para los valores predeterminados y no asumir ningún valor predeterminado.
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
dataGrid1.ItemsSource = Enumerable.Range(0, 50).Select(x => new Person()
{
FirstName = "John",
LastName = "Smith",
ID = x,
Delinquent = (x % 5 == 0) // every fifth person is 'delinquent'
});
}
private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
var person = (Person)e.Row.DataContext;
if (person.Delinquent)
{
e.Row.Background = new SolidColorBrush(Colors.Red);
e.Row.Foreground = new SolidColorBrush(Colors.White);
e.Row.FontStyle = FontStyles.Italic;
}
else
{
// defaults - without these you'll get randomly colored rows
// e.Row.Background = new SolidColorBrush(Colors.Green);
// e.Row.Foreground = new SolidColorBrush(Colors.Black);
// e.Row.FontStyle = FontStyles.Normal;
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public bool Delinquent { get; set; }
}
}
no creo que sus posibles filas para conseguir colores al azar con este código - pero es posible si no siempre se establece un color de fondo - ver mi respuesta a continuación –