public class ColorPickerHeaderTemplateSelector : DataTemplateSelector
{
public DataTemplate Template1 { get; set; }
public DataTemplate Template2 { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
CollectionViewGroup group = (CollectionViewGroup)item;
if ("カスタム" != group.Name.ToString())
return Template1;
else
return Template2;
}
}
グループの名前が"カスタム"の時だけTemplate2が選択されるように制御。
ColorPickerItemクラス
ItemTemplateにバインドされるデータ構造
public class ColorPickerItem : INotifyPropertyChanged
{
public string CategoryName { get; set; }
public int Column { get; set; }
public int Row { get; set; }
private Color _ItemColor;
public Color ItemColor
{
get { return _ItemColor; }
set {
_ItemColor = value;
_ItemBrush = new SolidColorBrush(_ItemColor);
OnPropertyChanged("ItemColor");
OnPropertyChanged("ItemBrush");
}
}
private SolidColorBrush _ItemBrush;
public Brush ItemBrush
{
get { return _ItemBrush; }
}
public string ToolTip
{
get { return string.Format("#{0:X2}{1:X2}{2:X2}", _ItemColor.R, _ItemColor.G, _ItemColor.B); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (null == this.PropertyChanged) return;
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
};
- CategoryName・・・グループ分けする為の名前
- Column,Row ・・・Gridの配置位置
- ItemColor ・・・色
- ItemBrush ・・・表示する為のカラーブラシ
- ToolTip ・・・ツールチップ表示用の16進色コードの文字列
Borderコントロールを使って色を表示しているが、BackgroundはBrush型のプロパティなのでColor型の値をバインド出来ない。その為ItemBrushも持つようにしている。
バインディングによるデータ受け渡しが正しく行われるようにINotifyPropertyChangedインターフェースを実装している。
PropertyChangedEventHandlerとOnPropertyChangedメソッドを実装しつつ、プロパティのセッターでOnPropertyChangedを呼び出す。

コメント
コメントを投稿