SilverlightのDataGridのセルの文字列を右寄せ・折り返しにしたり、背景色を変えたりする。

DataGridTextColumnのStyle系のプロパティを使用して、SilverlightのDataGridのセルの文字列を右寄せ・折り返しにしたり、背景色を変えたりする方法を紹介します。

アジェンダ

  • DataGridTextColumnのElementStyleプロパティとCellStyleプロパティ
  • セル内の文字列を右詰め表示
  • セル内の文字列を折り返して表示
  • セルの背景色を変更
  • まとめ

DataGridTextColumnのElementStyleプロパティとCellStyleプロパティ

DataGridTextColumnの場合、その列のセルはTextBlockがセットされます。このTextBlockのStyleを設定できるのがElementStyleプロパティです。
また、セル自身のStyleを設定することができるのがCellStyleプロパティです。
この二つはややこしいですが、区別して使用する必要があります。

セル内の文字列を右詰め表示

//右詰め表示
<sdk:DataGridTextColumn Binding="{Binding BMI}" Header="BMI">
    <sdk:DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="HorizontalAlignment" Value="Right"/>
        </Style>
    </sdk:DataGridTextColumn.ElementStyle>
</sdk:DataGridTextColumn>

セル内の文字列を折り返して表示

//折り返す
<sdk:DataGridTextColumn Binding="{Binding Date}" Header="日付">
    <sdk:DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap"/>
        </Style>
    </sdk:DataGridTextColumn.ElementStyle>
</sdk:DataGridTextColumn>

セルの背景色を変更

セルの背景色を変える場合は、CellStyleプロパティを使いますが、下記のようなXAMLですとイメージの3列目のように文字の背景のみが変更されてしまいます。

//セルの背景色設定失敗バージョン
<sdk:DataGridTextColumn Binding="{Binding Height}" Header="Height" IsReadOnly="True">
    <sdk:DataGridTextColumn.CellStyle>
        <Style TargetType="sdk:DataGridCell">
            <Setter Property="Background" Value="Red"/>
            <Setter Property="HorizontalAlignment" Value="Right"/>
        </Style>
    </sdk:DataGridTextColumn.CellStyle>
</sdk:DataGridTextColumn>


そこで、文字の右寄せ処理は、ElementStyleプロパティで行うようにするとうまくいきます。

// セルの背景色設定成功バージョン
<sdk:DataGridTextColumn Binding="{Binding Height}" Header="Height" IsReadOnly="True">
    <sdk:DataGridTextColumn.CellStyle>
        <Style TargetType="sdk:DataGridCell">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </sdk:DataGridTextColumn.CellStyle>
    <sdk:DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="HorizontalAlignment" Value="Right"/>
        </Style>
    </sdk:DataGridTextColumn.ElementStyle>
</sdk:DataGridTextColumn>

まとめ

Styleを設定できるプロパティを使用して、データグリッドのセルの文字列を右寄せ・折り返しにしたり、背景色を変えたりする方法を紹介しました。