グリッドでセルのデータに応じて書式を設定する方式では、C1FlexGrid の Columnオブジェクトに含まれる CellTemplate および CellEditingTemplate プロパティを使用して列内のセルを編集するためのビジュアル要素を指定します。
たとえば、次の例では、セルの値に応じて赤や緑色で表示する場合、条件付き列に対して CellTemplate を指定してカスタムセルを作成します。CellTemplate は必要なバウンドプロパティを含むTextBlock 要素を持ちます。
マークアップ |
コードのコピー
|
---|---|
<c1:Column Binding="{Binding Price}"> <c1:Column.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Price, StringFormat=n0}" HorizontalAlignment="Right" Foreground="{Binding Price, Converter={StaticResource ForegroundConverter}, ConverterParameter={StaticResource PriceRange} }" FontWeight="{Binding Price, Converter={StaticResource FontWeightConverter}, ConverterParameter={StaticResource PriceRange} }" /> </DataTemplate> </c1:Column.CellTemplate> </c1:Column> |
上記のコードでは、カスタムセルテンプレートの列を作成してデータソースの「Price」フィールドを TextBlock 要素内に「Text」、「Foreground」、「FontWeight」プロパティに連結しています。なお、「Text」プロパティはDouble型で自動に文字列に変換されてデータに連結できます。しかし、「Foreground」、「FontWeight」プロパティの場合はDouble値はブラシュなどに変換できませんので、コンバータを指定する必要があります。
ForegroundConverter と FontWeightConverter コンバータは、範囲を指定するパラメータをサポートしています。コンバータはこの範囲を使って適当なブラッシュやフォントウエートを選択します。また、コンバータとパラメータの両方がページリソースとしてXAML内に指定されます。詳細については、次のコードをご参照ください。
マークアップ |
コードのコピー
|
---|---|
<Window.Resources> <!-- ForeGroundConverter.cs 内にコンバータを実現します--> <local:ForegroundConverter x:Key="ForegroundConverter" /> <!-- FontWeightConverter.cs 内にコンバータを実現します--> <local:FontWeightConverter x:Key="FontWeightConverter" /> <!-- コンバータ範囲 (ポイントの値として実現し、 X は最低値と Y は最高値となります) --> <Point x:Key="PriceRange" X="500" Y="1500" /> <Point x:Key="WeightRange" X="200" Y="1000" /> <Point x:Key="CostRange" X="200" Y="1000" /> <Point x:Key="VolumeRange" X="2000" Y="6000" /> </Window.Resources> |
コンバータの実現方法については、次のコードをご参照ください。