WPF DataGrid - как установить заголовки столбцов для вертикального текста?
Ну, на самом деле я повернул на 90 градусов от горизонтали. Мне нужно сделать это, потому что текст для заголовка довольно длинный, но значение ячейки короткое, и я хочу разместить на экране много столбцов. Можно ли сделать это легко или мне нужно сначала изучить ресурсы и шаблоны? Я не против "взломать" решение!
2 ответа
Это будет вращать весь ColumnHeaderCell:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="270" />
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
Знать: это значит HorizontalContentAlignment
тогда VerticalContentAlignment
и наоборот.
Вот еще один способ сделать это:
<Style x:Key="soDataGrid_ColumnHeaderRotateStyle" TargetType="DataGridColumnHeader" >
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}"
FontWeight="Bold" Width="60"
VerticalAlignment="Center" TextAlignment="Center"
HorizontalAlignment="Center">
<TextBlock.LayoutTransform>
<RotateTransform Angle="270" />
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
Вы можете использовать стиль следующим образом
<DataGridComboBoxColumn Header="Portrait / 
Landscape" Width="42"
HeaderStyle="{StaticResource soDataGrid_ColumnHeaderRotateStyle}"
SelectedItemBinding="{Binding Orientation}"
ItemsSource="{Binding Mode=OneWay,
Source={StaticResource languageEnum}}" />
Я считаю, что этот подход дает вам много контроля. Полезно использовать код разрыва строки в длинном тексте заголовка.
К сожалению, я обнаружил, что вам нужно жестко указать ширину повернутого текстового блока - возможно, есть лучший способ установить эту ширину на основе содержимого текста.