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