2012-04-21 9 views
2

実際に、水平から-90度回転したものが私の意図です。私はこれを行う必要があります、ヘッダーのテキストがかなり長いが、セルの値が短いため、私は画面に多くの列を収めたいです。これを簡単に行うことは可能ですか、まずリソースとテンプレートについて知る必要がありますか?私は "ハック"の解決に気にしない!WPF DataGrid - 列見出しを縦書きに設定するにはどうすればよいですか?

+0

でも、これが欲しい –

答えて

12

これは全体ColumnHeaderCell回転します:

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

は注意してください:これはHorizontalContentAlignmentが、その後VerticalContentAlignmentとその逆であることを意味します。ここで

1

はそれを行うための別の方法です:

<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}}" /> 

を次のようにあなたは、スタイルを使用することができます。長いヘッダーテキストに改行コードを使用すると便利です。

残念ながら、回転したテキストブロックの幅をハードコードする必要があることがわかりました。おそらく、テキストの内容に基づいてこの幅を設定する方が良いでしょう。

関連する問題