I want to create a global style that sets the VerticalAlignment
to Center
for all TextBlock
controls inside a DataGrid
or inside a DataGridTextColumn
.
I don't want to copy the following into every DataGridTextColumn
because it feels repetitive.
<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
I tried something like the following but it doesn't work because DataGridTextColumn
does not inherit from FrameworkElement
or FrameworkContentElement
. DataGrid
itself does but any further wrapping I try leads to errors:
<Style TargetType="DataGridTextColumn">
<Setter Property="ElementStyle">
<Setter.Value>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</Setter.Value>
</Setter>
</Style>
You can define a
CellStyle
as below:And assign it to the DataGrid:
CellStyle="{StaticResource DataGridCellStyle}"
. In this way all your cells will have content centered.EDIT: The above code is from one of my projects and also contains the code to remove grid lines in the DataGrid. You can get them back by changing
Grid
toBorder
in the template. Like this: