3

嗯,实际上从水平旋转-90 度就是我的意思。

我需要这样做,因为标题的文本很长,但单元格的值很短,我想在屏幕上放置很多列。

是否可以轻松做到这一点,还是我需要先了解资源和模板?我不介意“黑客”解决方案!

4

2 回答 2

17

这将旋转整个 ColumnHeaderCell:

<DataGrid.ColumnHeaderStyle>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="LayoutTransform">
            <Setter.Value>
                <RotateTransform Angle="270" />
            </Setter.Value>
        </Setter>
    </Style>
</DataGrid.ColumnHeaderStyle>

请注意:这意味着HorizontalContentAlignment然后是 a VerticalContentAlignment,反之亦然。

于 2012-04-21T09:41:02.990 回答
4

这是另一种方法:

    <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 / &#x0a;Landscape" Width="42"
     HeaderStyle="{StaticResource soDataGrid_ColumnHeaderRotateStyle}"
     SelectedItemBinding="{Binding Orientation}"  
     ItemsSource="{Binding Mode=OneWay, 
     Source={StaticResource languageEnum}}" />

我发现这种方法给了你很多控制权。在长标题文本中使用换行代码很有帮助。

Unfortunately I have found you need to hardcode the width of the rotated textblock - maybe there is a better way to set this width based on the text content.

于 2012-11-07T21:18:52.120 回答