Rotates a WPF DataGrid at design-time and run-time, including row-headers and row-details, using only XAML.
Also clears up text "smudging" that usually happens with rotating text.
Image of Rotated WPF DataGrid
How to Rotate a WPF DataGrid
Add the following sections to your DataGrid:
<DataGrid.Resources>
<Style x:Key="DataGridBase" TargetType="Control">
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="1" ScaleY="-1" />
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="TextOptions.TextFormattingMode" Value="Display" />
</Style >
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridBase}"/>
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource DataGridBase}"/>
<Style TargetType="DataGridRowHeader" BasedOn="{StaticResource DataGridBase}"/>
</DataGrid.Resources>
<DataGrid.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="90" />
<MatrixTransform Matrix="-1, 0, 0, 1, 0, 0" />
</TransformGroup>
</DataGrid.LayoutTransform>
To rotate Row Details, apply the same LayoutTransform as the DataGrid:
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<StackPanel.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="90" />
<MatrixTransform Matrix="-1, 0, 0, 1, 0, 0" />
</TransformGroup>
</StackPanel.LayoutTransform>
<TextBlock Height="100" Text="Binding Image" />
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
Note: Some CellStyle choices will prevent the DataGrid from rotating completely, so if your DataGrid does not display as illustrated above, please remove the misbehaving CellStyle settings.