在Silverlight数据网格中设置DataGridHeaderBackground的背景颜色

时间:2010-02-01 11:33:36

标签: silverlight datagrid

我有一个应用程序,用户可以在运行时设置datagrid标题背景颜色。我怎样才能做到这一点?我通过以下代码尝试了相同但它抛出异常。我使用了绑定但它不起作用。

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

1 个答案:

答案 0 :(得分:0)

如果没有进一步的详细信息(例如您获得的例外情况),很难理解为什么会出现异常。我怀疑style变量有一个空引用。

我还怀疑它的原因是this对象的资源字典中不存在“DataGridHeaderStyle”,我猜这是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));