How to align text in DataGrid

The obvious solution is to set a HorizontalAlignment property of DataGridCell style:

1
2
3
4
5
6
7
<DataGridTextColumn Binding="{Binding Quantity, StringFormat='#,0.0000'}" ClipboardContentBinding="{x:Null}" Header="Quantity">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell" >
            <Setter Property="HorizontalAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Quantity, StringFormat='#,0.0000'}" ClipboardContentBinding="{x:Null}" Header="Quantity">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell" >
            <Setter Property="HorizontalAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

But this gives a bad side-effect when you select a row in your DataGrid:

To avoid this, instead of using CellStyle, you can apply ElementStyle targeting to TextBlock, which holds the text in DataGridTextColumn:

1
2
3
4
5
6
7
<DataGridTextColumn Binding="{Binding Quantity, StringFormat='#,0.0000'}" ClipboardContentBinding="{x:Null}" Header="Quantity">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="TextAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Quantity, StringFormat='#,0.0000'}" ClipboardContentBinding="{x:Null}" Header="Quantity">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="TextAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

That works nicely:

Happy coding!

Leave a comment

Your email address will not be published. Required fields are marked *