Tôi đã có cùng một vấn đề này và tìm ra nó sau khi thực hiện một bài kiểm tra tối thiểu và một số lý luận suy luận!
Về cơ bản các giải pháp là LUÔN chắc chắn rằng bạn thiết lập màu nền (hoặc bất kỳ phong cách trên thực tế). Đừng thừa nhận bất kỳ giá trị mặc định nào cho kiểu dáng hàng. Tôi giả định mặc định là màu trắng - là một giả định hợp lý nhưng thực ra không phải như vậy.
Thông tin chi tiết:
Dường như thời gian chạy reuses thể hiện của lớp Row khi vẽ nhiều hàng. Tôi đã không xác minh điều này ở tất cả, nhưng đánh giá từ các triệu chứng có vẻ như điều đó phải xảy ra.
Tôi chỉ có một hoặc hai hàng nên được tô màu khác nhau. Tôi đã nhìn thấy các hàng màu ngẫu nhiên khi cuộn lên và xuống.
Đây là lớp thử nghiệm mà tôi đã thực hiện. Mỗi hàng thứ năm được cho là màu đỏ và nghiêng.
Bạn sẽ thấy một vài dòng được nhận xét (thiết lập mặc định là nền không nghiêng và trắng). Với những nhận xét ra - nếu bạn di chuyển lên và xuống bạn sẽ thấy rất nhiều màu đỏ !! Điều này là do các đối tượng hàng đang được sử dụng lại. Nếu bạn làm cho cửa sổ nhỏ hơn và sau đó tối đa hóa nó một số màu trắng sẽ trở lại. Có lẽ thu gom rác thu thập hàng nó không nghĩ rằng bạn sẽ cần bất kỳ chi tiết sau khi đã làm cho cửa sổ nhỏ hơn.
Như tôi đã nói ở trên, giải pháp là luôn luôn chỉ định kiểu cho mặc định và không giả định bất kỳ giá trị mặc định nào.
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; }
}
}
Nguồn
2010-01-17 02:48:42
tôi không nghĩ rằng có thể hàng để có được màu ngẫu nhiên của nó với mã này - nhưng nó có thể nếu bạn không luôn luôn thiết lập một màu nền - xem câu trả lời của tôi dưới đây –