Без дополнительной информации (например, об исключении, которое вы получаете) трудно понять, почему вы получаете исключение. Я подозреваю, что переменная 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));