Create style for TextBlock in DataGridTextColumn
datagrid, datagridtextcolumn, styles, wpf
Solution
You can define a `CellStyle` as below:
<Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
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` to `Border` in the template. Like this:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
Problem
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> ```