WPF の DataGrid のヘッダーの調整に難儀したので、まとめがてらメモ。
完成系のイメージは以下の通り。

ところが、デフォルトの設定では、以下のように表示します。

そこで、以下の設定をすることで、完成形のイメージを作りました。
<DataGrid ColumnHeaderHeight="40" Margin="10">
<!-- 列ヘッダーのみ表示する(本来はDataGridタグ内の属性に記載の事) -->
<DataGrid.HeadersVisibility>Column</DataGrid.HeadersVisibility>
<DataGrid.Columns>
<DataGridTextColumn Header="あああ" Width="3*" />
<DataGridTextColumn Header="いいい
ううう" Width="5*" />
<DataGridTextColumn Header="えええ" Width="5*"/>
</DataGrid.Columns>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<!-- ヘッダーの罫線を黒にする -->
<Setter Property="BorderThickness" Value="0,0,1,1"/>
<Setter Property="BorderBrush" Value="Black"/>
<!-- ヘッダー文字をセンタリングする -->
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Items>
<!-- ここはフォーマット確認用のダミーなのでデタラメ -->
<TextBox></TextBox>
<TextBox></TextBox>
<TextBox></TextBox>
</DataGrid.Items>
</DataGrid>
以下、設定のポイントを列挙します。
- ヘッダーの罫線の色を変える
ColumnHeaderStyle の BorderBrush で色を、BorderThickness で線の太さを設定しました。
BorderThickness は四辺全部に線を引いてしまうと、線の太さが倍になって見えるので、右辺と下辺のみに線を入れました。(データ部の線の引き方とあわせた感じです)<DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <!-- ヘッダーの罫線を黒にする --> <Setter Property="BorderThickness" Value="0,0,1,1"/> <Setter Property="BorderBrush" Value="Black"/> - センタリングする
ColumnHeaderStyle の HorizontalContentAlignment と TextBlock.TextAlignment で水平方向のセンタリングをします。片側だけ設定したのでは見た目は左寄せに見えるので、両方設定することが重要です。
VerticalContentAlignment はデフォルトが Center なので今回はケースでは必要ないです。上寄せとかにする場合はここを操作します。<DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <!-- ヘッダー文字をセンタリングする --> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="TextBlock.TextAlignment" Value="Center"/> - 行ヘッダーを消す
行ヘッダーを設定しなくても表示はされてしまうので、HeadersVisibility に Column を設定することで、列ヘッダーのみを表示するように(行ヘッダーを表示しないように)します。
(以下は要素ではなく属性に設定する場合の記述例)<DataGrid HeadersVisibility="Column">
- 複数行テキストの設定
複数行のテキストを属性値として指定する場合は、改行コード(
)を指定します。
<DataGridTextColumn Header="いいい
ううう" /> - 列幅の比率指定
列幅(DataGridTextColumn.Width)の指定に "*"(star) が使えます。
<DataGridTextColumn Header="あああ" Width="3*" />