【问题标题】:Set the background color of DataGridHeaderBackground in Silverlight datagrid设置 Silverlight 数据网格中 DataGridHeaderBackground 的背景颜色
【发布时间】:2011-01-11 16:34:51
【问题描述】:

我有一个应用程序,用户可以在其中设置数据网格标题背景颜色在运行时。我怎样才能做到这一点?我通过以下代码尝试了相同的方法,但它引发了异常。我使用了绑定,但它不起作用。

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

【问题讨论】:

  • “满怀期待”??如果您准确地包含异常所说的内容,这可能会有所帮助?

标签: silverlight datagrid


【解决方案1】:

如果没有更多详细信息(例如您遇到的异常),很难理解您为什么会遇到异常。我怀疑style 变量有一个空引用。

我还怀疑它为空的原因是this 对象的资源字典中不存在“DataGridHeaderStyle”,我猜它是UserControl。为了获取Style,您需要查找实际的FrameworkElement 对象,该对象在其Resources 属性中包含Style。 (请注意,对资源的编程访问不会级联搜索父级资源的可视化树)。

但是,假设您可以解决您仍然遇到的问题。在Setters 集合本身上使用SetValue 与您实际需要做的完全不同。

你需要这样做:-

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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2011-11-04
    • 2013-11-23
    • 2011-09-14
    • 1970-01-01
    • 2018-02-02
    • 2011-02-20
    相关资源
    最近更新 更多