WPFデータグリッドの選択色を変更する

WPF 4の標準DataGridの場合
 WPFの標準DataGridの選択色と一口に言っても、実際にはそれに該当しそうな領域が3つほど存在します。





 上の図はデフォルトの状態で“コーヒーマイルド”と書かれた「B5」セルをクリックしたときの状態です。この状態で3つの領域は以下の通りです。

  1. 「A5」セルから「D5」セルまでの4つのセル(選択セル)
  2. 「B5」セル(フォーカスセル)
  3. 「A5」セルから「D5」セルまでと右側の列がない領域を含む行全体(選択行)



 デフォルトでは、1.は背景色がおそらくSystemColorsのHighlightColorになっており、2.はExcelの選択セルと同様の黒い枠線になっています。3.は何も設定されていません。


 ここからが3つの領域の背景色の設定方法の紹介です。WPFDataGridCellクラスには、IsSelectedプロパティIsFocusedプロパティがあります。これらのプロパティに対してプロパティトリガーを設定することでそれぞれ1.と2.の領域の外観を変更することが可能です。
また、DataGridRowクラスにも、IsSelectedプロパティがありますので、このプロパティで3.の領域の外観を変更することが可能です。



<DataGrid ItemsSource="{Binding}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Orange" />
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Navy" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>





 上記のコード例では背景色しか変更していませんが、BorderBrush、BorderThickness、Foregroundなどのプロパティに対して設定してやることで、そのほかの外観も変更可能です。


FlexGrid for WPF 1.0Jの場合
 FlexGrid for WPF 1.0Jでは、Windowsフォームと同様の感覚で使用できるよう、選択色を設定するためのプロパティを直接提供しているため、WPF標準のDataGridと比べた場合、設定はより単純になっています。


 先ほどの標準DataGridの1.に該当する領域の背景色をSelectionBackgroundプロパティで、2.に該当する領域の背景色をCursorBackgroundプロパティで設定します。



<c1:C1FlexGrid ItemsSource="{Binding}"
SelectionBackground="Green" CursorBackground="Orange"
SelectionMode="Row" />





 また、WPF標準のDataGridのデフォルトやExcelのように2.の領域を黒線で囲む外観とすることが、ShowMarqueeというプロパティをTrueに設定するというとても簡単な設定でできるようになっています。





 このようにカスタマイズの柔軟性よりも設定の簡便さを重視していることが、FlexGrid for WPFSilverlightの特徴になります。