在WPF DataGrid中的文本alignment

如何将列数据alignment到WPF DataGrid

不知道具体情况很难说,但是这里有一个以DataGridTextColumn为中心的:

 <wpf:DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"> <wpf:DataGridTextColumn.CellStyle> <Style> <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/> </Style> </wpf:DataGridTextColumn.CellStyle> </wpf:DataGridTextColumn> 

如果您正在使用DataGridTextColumn,则可以使用以下代码片段:

 <Style TargetType="DataGridCell"> <Style.Setters> <Setter Property="TextBlock.TextAlignment" Value="Center" /> </Style.Setters> </Style> 

我从huttelihut的解决scheme开始。 不幸的是,那还不适合我。 我调整了他的答案,并提出了这个问题(解决scheme是将文本alignment):

 <Resources> <Style x:Key="RightAligned" TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Right"/> </Style> </Resources> 

正如你所看到的,我将这个样式应用于TextBlock,而不是DataGridCell。

然后我必须设置元素样式,而不是单元格样式。

 ElementStyle="{StaticResource RightAligned}" 

肯特Boogaart +1。 我结束了这样做,这使得代码略微混乱(并使我能够使用几列alignment):

 <Resources> <Style x:Key="NameCellStyle" TargetType="DataGridCell"> <Setter Property="HorizontalAlignment" Value="Center" /> </Style> </Resources> <DataGrid.Columns> <DataGridTextColumn Header="Name" CellStyle="{StaticResource NameCellStyle}" Binding="{Binding Name}"/> // .. other columns </DataGrid.Columns> 

这里是@ MohammedAFadil的XAML答案,转换为后面的C#代码:

 var MyStyle = new Style(typeof(DataGridCell)) { Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) } }; 

要应用Style ,请设置DataGridCellStyle属性,例如

 var MyGrid = new DataGrid() { CellStyle = MyStyle }; 

或者在代码后面:

 grid.CellStyle = newCellStyle(); public static Style newCellStyle() { //And here is the C# code to achieve the above System.Windows.Style style = new Style(typeof(DataGridCell)); style.Setters.Add(new System.Windows.Setter { Property = Control.HorizontalAlignmentProperty, Value = HorizontalAlignment.Center }); return style; } 

我最终遇到了单元格出现问题,并且使用接受的答案来看起来很时髦。 我知道这是晚了,但希望我的发现将有助于某人。 我用:

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

而不是CellStyle。

好的,我使用了frameworkElement方法,但是当你尝试突出显示行时出现了一个奇怪的行为。

我已经把这个线程的WPF数据网格alignment的另一个例子!

我最喜欢的解决scheme是

 <DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" > <DataGridTextColumn.CellStyle> <Style> <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/> </Style> </DataGridTextColumn.CellStyle> 

感谢Danny Beckett将@ MohammedAFadil的XAML答案转换为C#代码。 我的所有数据网格都是dynamic设置的,所以我可以随时更改任何内容。

要设置一个空白的数据网格,没有任何内容,然后只是将它绑定到数据,只要把你的datagrid.columns

  var centerTextSetter = new Style(typeof(DataGridCell)) { Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) } }; DgDbNames.Columns.Add(new DataGridTextColumn() { Header = "Db Name", Binding = new System.Windows.Data.Binding("DbName"), IsReadOnly = true, Width = new DataGridLength(0.2, DataGridLengthUnitType.Star), CellStyle = centerTextSetter });