Установите цвет фона DataGridHeaderBackground в сетке данных Silverlight - PullRequest
1 голос
/ 01 февраля 2010

У меня есть приложение, в котором пользователь может установить цвет фона заголовка сетки данных во время выполнения. Как я могу это сделать? Я попытался сделать то же самое с помощью следующего кода, но он вызывает исключение. Я использовал привязку, но она не работает.

var style = this.Resources["DataGridHeaderStyle"] as Style;
style.Setters.SetValue(DataGridColumnHeader.BackgroundProperty, "Red");

1 Ответ

0 голосов
/ 01 февраля 2010

Без дополнительной информации (например, об исключении, которое вы получаете) трудно понять, почему вы получаете исключение. Я подозреваю, что переменная style имеет нулевую ссылку.

Я также подозреваю, что причина, по которой он пуст, состоит в том, что «DataGridHeaderStyle» не существует в словаре ресурсов объекта this, который, как я предполагаю, является UserControl. Чтобы получить Style, вам нужно найти фактический объект FrameworkElement, который содержит Style в свойстве Resources. (Обратите внимание, что программный доступ к ресурсам не объединяет визуальное дерево в поиске ресурса родителей).

Однако, при условии, что вы можете исправить, что у вас все еще есть проблема. Использование SetValue на самом коллективе Setters совсем не похоже на то, что вам действительно нужно делать.

Вы должны сделать это: -

style.Setters.Add(new Setter(DataGridColumnHeader.BackgroundProperty,  new SolidColorBrush(Colors.Red));

Конечно, это работает, только если стиль еще не содержит Setter для свойства. Следовательно, более надежная версия: -

var setter = style.Setters
                  .OfType<Setter>()
                  .Where(s => s.Property == DataGridColumnHeader.BackgroundProperty)
                  .FirstOrDefault();

if (setter != null)
    setter.Value = new SolidColorBrush(Colors.Red);
else
    style.Setters.Add(new Setter(DataGridColumnHeader.BackgroundProperty,  new SolidColorBrush(Colors.Red));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...