将 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 单元格右对齐而不使新行上的可选区域变小?
修改easyui中datagrid表头和数据不能分开对齐的BUG。