2010-02-01 5 views
1

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

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

«Бросание искушения» ?? Было бы полезно, если бы вы включили именно то, что говорит исключение? – AnthonyWJones

ответ

0

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