【问题标题】:Align DataGrid Column Header to Center将 DataGrid 列标题居中对齐
【发布时间】: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}"/>

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

【问题讨论】:

标签: c# wpf datagrid


【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2017-11-05
        • 2011-01-28
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        相关资源
        最近更新 更多