将 DataGrid 列标题居中对齐

Posted

技术标签:

【中文标题】将 DataGrid 列标题居中对齐【英文标题】:Align DataGrid Column Header to Center 【发布时间】:2013-10-08 11:49:32 【问题描述】:

我需要将WPF DataGrid Column Header 文本对齐到居中。我创建了一个样式,并使用下面的HeaderStyle 属性附加了它。

风格

<Window.Resources>
    <Style x:Key="CenterGridHeaderStyle" TargetType="DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
    </Style>
</Window.Resources>

<DataGridTextColumn 
   Binding="Binding Path=Name" Header="Name" IsReadOnly="True" 
   HeaderStyle="DynamicResource CenterGridHeaderStyle"/>

但这不会将列标题文本与中心对齐。我该怎么做?

【问题讨论】:

你可以找到答案:***.com/questions/7943729/… 试试这样:***.com/questions/7943729/… 【参考方案1】:

检查一下

<DataGridTextColumn Header="Nombre"
                          Binding="Binding Nombre">
<DataGridTextColumn.HeaderStyle>
  <Style TargetType="DataGridColumnHeader">
     <Setter Property="HorizontalContentAlignment"
                 Value="Center" />
  </Style>
</DataGridTextColumn.HeaderStyle>

【讨论】:

如果您的解决方案有效而不是@Bishan 的解决方案,我们将不胜感激。 我认为我们可以很高兴在 WPF 中并不是所有的 object() 类型的东西,我们需要通过样式和绑定添加每个属性。好辛苦啊……【参考方案2】:

应该是StaticResource而不是Column中的DynamicResource:

风格

<Window.Resources>
    <Style x:Key="CenterGridHeaderStyle" TargetType="DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
    </Style>
</Window.Resources>

<DataGridTextColumn 
   Binding="Binding Path=Name" Header="Name" IsReadOnly="True" 
   HeaderStyle="StaticResource CenterGridHeaderStyle"/>

【讨论】:

IMO 这是实际的正确答案。接受的答案提供了替代方案,但实际上并未说明问题中提供的代码错误的原因。【参考方案3】:

在 AutoGeneratingColumn 以编程方式执行此操作的响应:

 private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    
                e.Column.HeaderStyle = new Style(typeof(DataGridColumnHeader));
                e.Column.HeaderStyle.Setters.Add(new Setter(HorizontalContentAlignmentProperty, HorizontalAlignment.Center));

    

提示,使用属性:

public class ColumnNameAttribute : Attribute

    public HorizontalAlignment Alignment  get; set;
    public ColumnNameAttribute(HorizontalAlignment alignment)
        Alignment = alignment;


public class Example()
    [ColumnName(HorizontalAlignment.Center)]
    public string Column get; set;


 private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)

   var desc = e.PropertyDescriptor as PropertyDescriptor;
   var att = desc.Attributes[typeof(ColumnNameAttribute)] as ColumnNameAttribute;
   if(att != null)
           e.Column.HeaderStyle = new Style(typeof(DataGridColumnHeader));
           e.Column.HeaderStyle.Setters.Add(new Setter(HorizontalContentAlignmentProperty, att.Alignment));
    


【讨论】:

【参考方案4】:

试试这个

<DataGridTextColumn.CellStyle>
  <Style>
    <Setter Property="HorizontalAlignment" Value="Center" />
  </Style>
</DataGridTextColumn.CellStyle>

【讨论】:

【参考方案5】:

我在寻找 Row Headers 对齐的相同问题时来到这里。万一其他人在搜索,解决方案很简单:

<DataGrid.RowHeaderStyle>
  <Style TargetType="DataGridRowHeader">
    <Style.Resources>
      <Style TargetType="StackPanel">
        <Setter Property="HorizontalAlignment" Value="Center" />
      </Style>
    </Style.Resources>
  </Style>
</DataGrid.RowHeaderStyle>

【讨论】:

问题是关于更改单个列。 @ChrisBordeman:可以键入样式以将它们应用于特定范围。 当然,但是你应该展示它而不是这个。【参考方案6】:

这是我用来更改标题文本对齐方式的方法。

<DataGrid.Columns>
    <DataGridTemplateColumn Width="Auto" MinWidth="60" Header=" ID " IsReadOnly="True">                                                                <DataGridTemplateColumn.HeaderStyle>
     <Style TargetType="DataGridColumnHeader">
         <Setter Property="HorizontalContentAlignment" Value="Center"/>
         <Setter Property="Background"  Value="#c0c0c0"/>
         <Setter Property="BorderThickness" Value="1"/>
         <Setter Property="FontWeight" Value="Bold"/>
         <Setter Property="FontSize" Value="12"/>
     </Style>                                                        </DataGridTemplateColumn.HeaderStyle>                                                        <DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
        <TextBlock Text="Binding ID" TextAlignment="Center" />
     </DataTemplate>                                                       </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

【讨论】:

以上是关于将 DataGrid 列标题居中对齐的主要内容,如果未能解决你的问题,请参考以下文章

如何让 WPF DataGrid 单元格右对齐而不使新行上的可选区域变小?

datagridview 列居中

修改easyui中datagrid表头和数据不能分开对齐的BUG。

C# DataGrid根据某列的内容设置行字体加粗 单元格设置对齐方式

DataGrid 标题居中

Flex - 垂直对齐 Datagrid 标题文本的问题