C# Silverlight Datagrid - Изменение цвета строки

Я пошел от Java до C# из-за смены работы. Сначала, я был немного обеспокоен различием, но на практике, это не имело значения.

, Возможно, именно, потому что я происхожу из C++, имеет описание исключения, но это не является наиболее часто используемым. Я пишу каждую строку кода, как будто это могло бросить - всегда используют использование вокруг Доступного и думают об очистке, в которой я должен выполнить наконец.

Ретроспективно распространение объявления вызовов в Java действительно не получило меня ничто.

я хотел бы способ сказать, что функция определенно никогда не бросает - я думаю, что это было бы более полезно.

7
задан Goober 2 October 2009 в 14:03
поделиться

2 ответа

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);
        }
3
ответ дан 6 December 2019 в 15:24
поделиться

У меня была такая же проблема, и я разобрался с ней после минимального теста и некоторых дедуктивных рассуждений!

В принципе, решение - ВСЕГДА . Убедитесь, что вы установили цвет фона (или любой другой стиль на самом деле). Не предполагайте никаких установок по умолчанию для стилизации строк . Я предполагал. по умолчанию белый - это разумное предположение, но на самом деле это не так.

Подробнее:

Похоже, что при отрисовке нескольких рядов при повторном использовании экземпляров класса 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; }
    }
}
5
ответ дан 6 December 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: