C# 在运行时使用自动生成的列更改WPF datagrid中列标题的颜色
我在WPF项目窗口中有一个WPFC# 在运行时使用自动生成的列更改WPF datagrid中列标题的颜色,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我在WPF项目窗口中有一个WPFDataGrid。我已经用数据表填充了网格,并自动生成了列(不幸的是这是必要的),并且需要根据某些其他因素更改列的标题颜色 我有一个需要突出显示的列名列表,可以很容易地根据这些列名计算出它们的索引(因为我自己在DataGrid中生成了它们) 然而,我似乎无法让列标题改变颜色,这必须在代码中完成,因为我不知道在设计时哪些列需要突出显示。我已经在页眉上有了一点模板。。。不确定这是否是“压倒”我正在尝试做的事情 网格: 这样不行。原因有很多 您正在DataGridCol
DataGrid
。我已经用数据表
填充了网格,并自动生成了列(不幸的是这是必要的),并且需要根据某些其他因素更改列的标题颜色
我有一个需要突出显示的列名列表,可以很容易地根据这些列名计算出它们的索引(因为我自己在DataGrid
中生成了它们)
然而,我似乎无法让列标题改变颜色,这必须在代码中完成,因为我不知道在设计时哪些列需要突出显示。我已经在页眉上有了一点模板。。。不确定这是否是“压倒”我正在尝试做的事情
网格:
这样不行。原因有很多
private static readonly DependencyProperty ColumnHeaderTextProperty = DependencyProperty.Register("ColumnHeader", typeof(string), typeof(MyDataGridColumn));
public string ColumnHeaderText
{
get { return (string)(GetValue(ColumnHeaderTextProperty)); }
set { SetValue(ColumnHeaderTextProperty, value); }
}
private static readonly DependencyProperty ColumnHeaderBackgroundProperty = DependencyProperty.Register("ColumnHeader", typeof(Brush), typeof(MyDataGridColumn));
public Brush ColumnHeaderBackground
{
get { return (Brush)(GetValue(ColumnHeaderBackgroundProperty )); }
set { SetValue(ColumnHeaderBackgroundProperty , value); }
}
然后在列的构造函数中设置dataContext,如下所示:
public MyDataGridColumn()
{
Header = this;
ColumnHeaderText = "My header text";
}
myColumn.Header = myColumn;
myColumn.SetValue(columnHelper.ColumnHeaderTextProperty, "my Header Text");
myColumn.SetValue(columnHelper.ColumnHeaderBackgroundProperty, Brushes.Red);
(而不是您以前使用的Header=“我的页眉文本”
)
最后,更新标题模板:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding ColumnHeaderText}" Foreground="Blue" Background="{Binding ColumnHeaderBackground}">
<TextBlock.LayoutTransform>
<RotateTransform Angle="-90" />
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
编辑:如果您的列没有特殊的类,您应该可以使用附加的属性来执行此操作,并且您可以将我编写的代码放在构造函数中的其他地方,如下所示:
public MyDataGridColumn()
{
Header = this;
ColumnHeaderText = "My header text";
}
myColumn.Header = myColumn;
myColumn.SetValue(columnHelper.ColumnHeaderTextProperty, "my Header Text");
myColumn.SetValue(columnHelper.ColumnHeaderBackgroundProperty, Brushes.Red);
编辑hashlock^为什么您的样式将
HeaderStringFormat
设置为Colors.Red
?我只是想突出显示文本,这是可以接受的,但我宁愿突出显示整个“header”单元格。这不起作用,但它仍然运行,没有出现任何WPF异常。我只是好奇,因为HeaderStringFormat
通常类似于“M/d/yy”
或“,#0.00”
,而不是一种颜色。哈哈。。。显然,我在那里失败得很惨。是的,你是对的,我在玩HeaderCellStyle或类似的游戏,看到了这个,就换了房子,以防它起作用。:-D好的,就因为你在这个星期一早上让我笑了^^
((MyDataGridColumn)(this.dgSkillsMatrix.Columns[4])).ColumnHeaderBackground = Brushes.Red;
myColumn.Header = myColumn;
myColumn.SetValue(columnHelper.ColumnHeaderTextProperty, "my Header Text");
myColumn.SetValue(columnHelper.ColumnHeaderBackgroundProperty, Brushes.Red);