Ich hatte das gleiche Problem und habe es nach einem minimalen Test und einer deduktiven Schlussfolgerung herausgefunden!
Grundsätzlich ist die Lösung zu IMMER sicherstellen, dass Sie die Hintergrundfarbe (oder jede mögliche Art in der Tat). Nehmen Sie keine Standardeinstellungen für das Zeilenstyling an. Ich ging davon aus, ein Standard von Weiß - das ist eine vernünftige Annahme, aber war eigentlich nicht der Fall.
Weitere Details:
Es sieht aus wie die Laufzeitinstanzen der Zeilenklasse wieder verwendet, wenn mehrere Zeilen zu machen. Ich habe das alles noch nicht bestätigt, aber nach den Symptomen zu urteilen, scheint es so zu sein.
Ich hatte nur eine oder zwei Zeilen, die anders gefärbt werden sollten. Ich sah zufällig farbige Reihen beim Scrollen nach oben und unten.
Hier ist meine Testklasse, die ich gemacht habe. Jede fünfte Reihe soll rot und kursiv sein.
Sie werden sehen, dass ein paar Zeilen auskommentiert sind (die einen Standard für nicht-kursiven und weißen Hintergrund festlegen). Mit diesen auskommentiert - wenn Sie nach oben und unten scrollen, werden Sie viel rot sehen !! Dies liegt daran, dass die Zeilenobjekte wiederverwendet werden. Wenn Sie das Fenster verkleinern und dann maximieren, wird etwas Weiß zurückkommen. Wahrscheinlich denkt der Müllsammler, der die Reihen sammelt, dass Sie nicht mehr brauchen werden, nachdem Sie das Fenster kleiner gemacht haben.
Wie oben erwähnt, besteht die Lösung darin, immer Stile für Standardwerte anzugeben und keine Standardwerte anzunehmen.
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; }
}
}
Ich glaube nicht, seine möglich mit diesem Code zufällig farbigen Zeilen zu bekommen - aber es ist möglich, wenn Sie nicht immer eine Hintergrundfarbe - meine Antwort unten –