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!