セルの外観を定義する CellPresenter クラスを使用してセルレベルへのデータバインディングが可能です。
Cell クラスのメンバは、依存関係プロパティを持たないため、バインディングターゲットとすることができません。しかし、CellPresenter クラスでは Value プロパティを含む多くのプロパティが依存関係プロパティであるため、バインディングターゲットとすることが可能です。
CellPresenter クラスのプロパティへのバインディングをセルに適用するには、CellPresenter クラスを TargetType とした Style を定義し、コントロールの CellStyle プロパティに Style を指定します。
次のサンプルコードは、セルのValueプロパティの値により、スタイルを変更する例です。セルの値が「男性」のとき「女性」のときには文字色や背景色を「東京都」のときはフォントを変更します。 また、ロックされているセルの背景色と文字色を変更します。
XAML |
コードのコピー |
---|---|
<Window.Resources> <Style TargetType="sg:CellPresenter" x:Key="CellBindingStyle"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="男性"> <Setter Property="Background" Value="LightBlue"/> <Setter Property="Foreground" Value="Blue"/> <Setter Property="SelectionForeground" Value="Yellow"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="女性"> <Setter Property="Background" Value="LightPink"/> <Setter Property="Foreground" Value="Pink" /> <Setter Property="SelectionForeground" Value="Red"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="東京都"> <Setter Property="FontSize" Value="20" /> <Setter Property="FontWeight" Value="Bold"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Locked}" Value="true"> <Setter Property="Background" Value="Gray" /> <Setter Property="Foreground" Value="White"/> </DataTrigger> </Style.Triggers> </Style> </Window.Resources> <sg:GcSpreadGrid x:Name="gcSpreadGrid1" CellStyle="{StaticResource CellBindingStyle}" /> |
CellPresenter クラスでの外観設定は以下のようにグリッドを構成する要素の親子関係では、一番「親」に当たり、優先順位としては一番下となります。
しかし、背景色と文字色に限り CellPresenter クラスの ActualBackground および ActualForeground プロパティのみ、セルの「子」にあたり一番高い優先度で適用されます。
(コンテンツ領域既定の設定)
|- CellPresenter クラスでの定義
|- 交互の行(「1行おきに背景色 」)
|- 列
|- グループヘッダ/フッタ
|- 行
|- 新規行(「新規行」)
|- セル
|- CellPresenter.ActualBackground / CellPresenter.ActualForeground プロパティによるセルの背景色と文字色
例えば、1行おきに背景色を設定している SPREAD で、セルの値により背景色を変更したい場合などは、CellPresenter クラスの ActualBackground プロパティを使用します。
XAML |
コードのコピー |
---|---|
<Window.Resources> <Style TargetType="{x:Type sg:CellPresenter}" x:Key="CellBindingStyle"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="男性"> <Setter Property="ActualBackground" Value="LightBlue"/> <Setter Property="ActualForeground" Value="Blue"/> </DataTrigger> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Value}" Value="女性"> <Setter Property="ActualBackground" Value="LightPink"/> <Setter Property="ActualForeground" Value="Pink" /> </DataTrigger> </Style.Triggers> </Style> </Window.Resources> <sg:GcSpreadGrid x:Name="gcSpreadGrid1" CellStyle="{StaticResource CellBindingStyle}"> <sg:GcSpreadGrid.AlternatingRows> <sg:AlternatingRow Background="AliceBlue"/> <sg:AlternatingRow Background="White"/> </sg:GcSpreadGrid.AlternatingRows> </sg:GcSpreadGrid> |