在运行时使用自动生成的列更改WPF数据网格中列标题的颜色 - c#

我在WPF项目窗口中有一个WPF DataGrid。我已经用DataTable填充了网格,并自动生成了列(不幸的是,这是必要的),并且需要根据某些其他因素来更改列的标题颜色。

我有一个需要突出显示的列名列表,并且可以轻松地基于此找出它们的索引(因为我在DataGrid中自己生成了它们)。

但是,我似乎无法让列标题更改颜色,这必须在代码中完成,因为在设计时我不知道哪些列需要突出显示。我已经在标题上有了一些模板……不确定这是否“覆盖”了我想做的事情。

格:

<DataGrid FrozenColumnCount="1"  AutoGenerateColumns="True" Grid.Row="1"
    AlternationCount="2" HeadersVisibility="Column" Name="dgSkillsMatrix"
    Margin="0,0,2,1" HorizontalGridLinesBrush="White" VerticalGridLinesBrush="White"
    AlternatingRowBackground="#FFD0D0EB" RowBackground="#FFECECF5" FontSize="10.5"
    Grid.ColumnSpan="1" CellStyle="{StaticResource CellHighlighterStyle}"
    ColumnHeaderStyle="{StaticResource dataGridColumnHeader}" />

标题模板/样式:

<DataTemplate x:Key="RotateHeaderTemplate" >
    <TextBlock Text="{Binding}" Foreground="Blue" >
        <TextBlock.LayoutTransform>
            <RotateTransform Angle="-90" />
        </TextBlock.LayoutTransform>
    </TextBlock>
</DataTemplate>

到目前为止,这是我尝试过的操作以更改列标题(在Window_Activated事件上调用,因为在实际构建grid / WPF树时在构造函数之后调用该事件):

Style newStyle = new System.Windows.Style()
{
    TargetType = typeof(DataGridColumn)
};

// SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("#F70F49"))
newStyle.Setters.Add(new Setter(DataGridColumn.HeaderStringFormatProperty, new SolidColorBrush(Colors.Red)));
this.dgSkillsMatrix.Columns[4].HeaderStyle = newStyle;

参考方案

这是行不通的。有很多原因。

您将BRUSH放在DataGridColumn.HeaderStringFormatProperty >>上将不起作用。
无论如何,它都不会转移到列的标题中。

为此,您需要了解默认情况下未将DataGridColumnHeader的dataContext设置为对应的列。您必须手动设置。

看一下这个帖子:https://stackoverflow.com/a/5249223/479384

现在,就您而言,我将以与上述链接相同的方式进行操作:

在DataGridColumn的类中添加所需的依赖项属性:

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";
}

(而不是以前的Header = "my header text";

最后,更新标题模板:

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

然后,在后面的代码中,当您想更改标题的背景时,只需执行以下操作:

((MyDataGridColumn)(this.dgSkillsMatrix.Columns[4])).ColumnHeaderBackground = Brushes.Red;

编辑:如果您的列没有特殊的类,则应该能够通过附加的属性来执行此操作,并且始终可以将我在构造函数中编写的代码放在其他类似的地方:

myColumn.Header = myColumn;
myColumn.SetValue(columnHelper.ColumnHeaderTextProperty, "my Header Text");
myColumn.SetValue(columnHelper.ColumnHeaderBackgroundProperty, Brushes.Red);

编辑哈希锁^^

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

CodeIgniter更新查询被执行两次 - php

我正在使用CodeIgniter 2.2。每次访问页面时,我都必须用+1更新数据库。代码可以工作,但是每次都会增加+2。示例:如果是total views=2,则在单击页面后total views应该是3,但是数据库中的值是4。我确定我在控制器中仅调用一次模型add_one_to_view_image。控制者 function view(){ $view_i…

jQuery Ajax文件上传在客户端浏览器上无法正常工作 - javascript

我正在尝试使用Ajax和JQuery实现个人资料图片上传功能我能够将个人资料图片成功上传到我尝试过的所有机器和移动设备上的数据库中。它适用于我在Chrome,Edge,Firefox,Safari甚至Vivaldi上使用。问题是我住在加拿大的客户无法将他们的个人资料图片上传到数据库。另外,纵向宽高比的图像倾向于向侧面旋转。我一直在要求他重​​新注册并多次提供…

将python scikit学习模型导出到pmml - python

我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…