【问题标题】:Setting wpf DataGrid Column style programatically - After a 'SetterBaseCollection' is in use (sealed), it cannot be modified以编程方式设置 wpf DataGrid 列样式 - 使用“SetterBaseCollection”(密封)后,无法修改
【发布时间】:2022-01-04 19:45:22
【问题描述】:

我正在使用以下代码以编程方式更改 DataGrid 的列颜色:

this.ImportPreview.Columns[index].CellStyle = new Style(typeof(DataGridCell));
this.ImportPreview.Columns[index].CellStyle.Setters.Add(new Setter(DataGridCell.BackgroundProperty, new SolidColorBrush(Colors.LightBlue)));

这对每一列都有效。如果我再次尝试更改它,Setter Collection 将被锁定。

出现以下错误:

System.InvalidOperationException:
'After a 'SetterBaseCollection' is in use (sealed), it cannot be modified.'

我尝试清除 setter 集合,结果相同:

this.ImportPreview.Columns[index].CellStyle.Setters.Clear();

我找到了以下有希望的问题/答案,但答案对我来说是简写的。我不知道如何应用这个答案: How to add further style setters programmatically? When I try I got an InvalidOperationException exception (SetterBaseCollection is in use)

此外,还有很多类似的问题,但它们是基于在 xaml 中设置样式,而我正在尝试以编程方式进行。

【问题讨论】:

    标签: wpf datagrid setter


    【解决方案1】:

    您应该创建一个新的Style 并将CellStyle 属性设置为这个,而不是向现有的Style 添加设置器。

    您可以在现有Style 的基础上创建新的Style,然后简单地添加其他设置器。像这样的:

    DataGridColumn column = this.ImportPreview.Columns[index];
    Style newCellStyle = new Style(typeof(DataGridCell), column.CellStyle);
    newCellStyle.Setters.Add(new Setter(DataGridCell.BackgroundProperty, new SolidColorBrush(Colors.LightBlue)));
    column.CellStyle = newCellStyle;
    

    【讨论】:

    • 谢谢,效果很好! (我使用第一种方法创建样式并将setter应用于样式。然后将样式分配给列)
    • @julianbechtold:不客气。请记得accept the answer
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2010-12-10
    相关资源
    最近更新 更多