我有一个应用程序,用户可以在运行时设置datagrid标题背景颜色。我怎样才能做到这一点?我通过以下代码尝试了相同但它抛出异常。我使用了绑定但它不起作用。
var style = this.Resources["DataGridHeaderStyle"] as Style;
style.Setters.SetValue(DataGridColumnHeader.BackgroundProperty, "Red");
答案 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));