在Silverlight中更改Datagrid标头的背景色

在Silverlight中更改Datagrid标头的背景色,silverlight,datagrid,silverlight-2.0,Silverlight,Datagrid,Silverlight 2.0,我想更改Silverlight中Datagrid标头的背景色。尽管Datagrid没有公开标头背景属性,但它确实有ColumnHeaderStyle的属性。使用DaniCE之前为单个列建议的技术,我们可以为所有标题列(包括右侧的空白)替换标题模板。替换标题的整个模板的缺点是,我们丢失了默认标题模板中的排序箭头和分隔符。幸运的是,我们可以使用提取正在使用的默认模板,然后修改其副本 在这里,我提供了一个快速示例,它将把列标题的背景更改为浅蓝色,同时保留分隔符和排序。查看中的默认DataGridCol

我想更改Silverlight中Datagrid标头的背景色。

尽管Datagrid没有公开标头背景属性,但它确实有ColumnHeaderStyle的属性。使用DaniCE之前为单个列建议的技术,我们可以为所有标题列(包括右侧的空白)替换标题模板。替换标题的整个模板的缺点是,我们丢失了默认标题模板中的排序箭头和分隔符。幸运的是,我们可以使用提取正在使用的默认模板,然后修改其副本

在这里,我提供了一个快速示例,它将把列标题的背景更改为浅蓝色,同时保留分隔符和排序。查看中的默认DataGridColumnHeader模板,了解如何在鼠标悬停在ColumnHeader上时修改背景


希望这有帮助

我想出了一个“干净”的解决方案。。希望它对你有用。 我只是重写了DataGrid,并公开了GetTemplateChild方法。使用它,您可以访问DataGridColumnHeaderPresenter及其包含的DataGridColumnHeaders

1) 覆盖数据网格

/// <summary>
/// Extends the DataGrid so that it's possible to access the template objects
/// </summary>
public class DataGridEx : System.Windows.Controls.DataGrid
{
    /// <summary>
    /// Exposes Template items
    /// </summary>
    public Object GetTemplateObject(String name)
    {
        return this.GetTemplateChild(name);
    }
}
//
///扩展DataGrid,以便能够访问模板对象
/// 
公共类DataGridEx:System.Windows.Controls.DataGrid
{
/// 
///公开模板项
/// 
公共对象GetTemplateObject(字符串名称)
{
返回此.GetTemplateChild(名称);
}
}
2) 改变背景

DataGridEx grid=新DataGridEx()

。。。应用模板后

DataGridColumnHeadersPresenter obj=DataGrid.GetTemplateObject(“ColumnHeadersPresenter”)作为DataGridColumnHeadersPresenter

DataGridColumnHeader h=obj.Children[0]作为DataGridColumnHeader


h、 背景=新的SolidColorBrush(颜色为红色)

这对大卫非常有帮助!不幸的是,这不会使标题文本居中对齐。。尽管我什么都试过了
/// <summary>
/// Extends the DataGrid so that it's possible to access the template objects
/// </summary>
public class DataGridEx : System.Windows.Controls.DataGrid
{
    /// <summary>
    /// Exposes Template items
    /// </summary>
    public Object GetTemplateObject(String name)
    {
        return this.GetTemplateChild(name);
    }
}