在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
,请设置DataGrid
的CellStyle
属性,例如
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 });