Я пошел от Java до C# из-за смены работы. Сначала, я был немного обеспокоен различием, но на практике, это не имело значения.
, Возможно, именно, потому что я происхожу из C++, имеет описание исключения, но это не является наиболее часто используемым. Я пишу каждую строку кода, как будто это могло бросить - всегда используют использование вокруг Доступного и думают об очистке, в которой я должен выполнить наконец.
Ретроспективно распространение объявления вызовов в Java действительно не получило меня ничто.
я хотел бы способ сказать, что функция определенно никогда не бросает - я думаю, что это было бы более полезно.
I was after this:
void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
DataGridRow row = e.Row;
var c = row.DataContext as Job;
if (c != null && c.Status.Contains("omplete"))
e.Row.Foreground = new SolidColorBrush(Colors.Green);
else
e.Row.Foreground = new SolidColorBrush(Colors.Red);
}
У меня была такая же проблема, и я разобрался с ней после минимального теста и некоторых дедуктивных рассуждений!
В принципе, решение - ВСЕГДА . Убедитесь, что вы установили цвет фона (или любой другой стиль на самом деле). Не предполагайте никаких установок по умолчанию для стилизации строк . Я предполагал. по умолчанию белый - это разумное предположение, но на самом деле это не так.
Подробнее:
Похоже, что при отрисовке нескольких рядов при повторном использовании экземпляров класса Row. Я не проверял это вообще, но судя по симптомам, похоже, что это должно происходить.
У меня было только одна или две строки, которые должны быть окрашены по-другому. Я видела случайно окрашенные ряды при прокрутке вверх и вниз.
Вот мой тестовый класс, который я сделала. Каждый пятый ряд должен быть красным и курсивным.
Вы увидите пару прокомментированных строк (которые устанавливают по умолчанию неиталистический и белый фон). С этими комментариями - если вы прокрутите вверх и вниз, вы увидите много красного!!! Это потому, что объекты строк используются повторно. Если вы сделаете окно меньше, а затем увеличите его до максимума, то часть белого цвета вернётся. Наверное, сборщик мусора, собирающий строки, не думает, что вам понадобится больше после того, как вы сделаете окно меньше.
Как я уже говорил выше, решение заключается в том, чтобы всегда задавать стили по умолчанию и не предполагать никаких значений по умолчанию.
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; }
}
}