DataGrid row content vertical alignment DataGrid row content vertical alignment wpf wpf

DataGrid row content vertical alignment


Complete solution of this issue at MSDN: Vertical alignment of DataGrid row content.

In brief, in style-file set:

<!--body content datagrid cell vertical centering--><Style x:Key="Body_Content_DataGrid_Centering"        TargetType="{x:Type DataGridCell}">    <Setter Property="Template">        <Setter.Value>            <ControlTemplate TargetType="{x:Type DataGridCell}">                <Grid Background="{TemplateBinding Background}">                    <ContentPresenter VerticalAlignment="Center" />                </Grid>            </ControlTemplate>        </Setter.Value>    </Setter></Style>

In window file:

<DataGrid x:Name="ContentDataGrid"        Style="{StaticResource ContentDataGrid}"        CellStyle="{StaticResource Body_Content_DataGrid_Centering}"        ItemsSource="{Binding}"        RowEditEnding="ContentDataGrid_RowEditEnding">    <DataGrid.Columns>        <DataGridTextColumn Header="UserID"                Width="100"                IsReadOnly="True"                Binding="{Binding Path=userID}" />        <DataGridTextColumn Header="UserName"                Width="100"                Binding="{Binding Path=userName}" />        <DataGridTextColumn Header="UserAccessLevel"                Width="100"                Binding="{Binding Path=userAccessLevel}" />        <DataGridTextColumn Header="UserPassword"                Width="*"                Binding="{Binding Path=userPassword}" />    </DataGrid.Columns></DataGrid>

This will give you a wanted result:

alt text


To set individual text alignments you can use:

<DataGridTextColumn.ElementStyle>   <Style TargetType="TextBlock">       <Setter Property="TextAlignment" Value="Center" />   </Style></DataGridTextColumn.ElementStyle>


The following code will vertically align the content of a DataGridTextColumn cell:

<DataGridTextColumn.ElementStyle>    <Style TargetType="TextBlock">        <Setter Property="VerticalAlignment" Value="Center"></Setter>    </Style></DataGridTextColumn.ElementStyle>

Edit: I've come back to this problem and found the solution below to work better, it will center the contents of all the cells in DataGridTextRows both horizontally and vertically.

<UserControl.Resources>        <ResourceDictionary>        <Style TargetType="DataGridCell">            <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>            <Setter Property="VerticalAlignment" Value="Stretch"></Setter>            <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>            <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter>            <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter>        </Style>        </ResourceDictionary></UserControl.Resources>