If you have a Color, the propertyGrid will recognize it and use the ColorPicker....as in sample Data/PropertyGrid/Editors/DefaultEditors from the the LiveExplorer, available here : https://wpftoolkit.codeplex.com/releases/view/615196.
When you have a Brush, it could be a gradient Brush or a SolidColorBrush ; the ColorPicker only works with Colors, not Brushes,
If you know you will have SolidColorBrush, you could do the following in your PropertyGrid XAML to define an Editor for Brushes :
When you have a Brush, it could be a gradient Brush or a SolidColorBrush ; the ColorPicker only works with Colors, not Brushes,
If you know you will have SolidColorBrush, you could do the following in your PropertyGrid XAML to define an Editor for Brushes :
<xctk:PropertyGrid.EditorDefinitions>
<xctk:EditorTemplateDefinition TargetProperties="{x:Type Brush}">
<xctk:EditorTemplateDefinition.EditingTemplate>
<DataTemplate>
<xctk:ColorPicker SelectedColor="{Binding Value, Converter={StaticResource SolidColorBrushToColorConverter}}"
DisplayColorAndName="True"/>
</DataTemplate>
</xctk:EditorTemplateDefinition.EditingTemplate>
</xctk:EditorTemplateDefinition>
</xctk:PropertyGrid.EditorDefinitions>
where the Converter would do something like : public class SolidColorBrushToColorConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
SolidColorBrush brush = value as SolidColorBrush;
if( brush != null )
return brush.Color;
return default( Color? );
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
if( value != null )
{
Color color = ( Color )value;
return new SolidColorBrush( color );
}
return default( SolidColorBrush );
}
}
The XAMl part can be written as : public PropertyGridView()
{
InitializeComponent();
var etd = new EditorTemplateDefinition() { TargetProperties = new List<object>() { typeof( Brush ) } };
var dt = this.GetDataTemplate();
etd.EditingTemplate = dt;
_propertyGrid.EditorDefinitions.Add( etd );
}
private DataTemplate GetDataTemplate()
{
var markup = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:xctk=\"http://schemas.xceed.com/wpf/xaml/toolkit\">";
markup += "<Grid>";
markup += "<Grid.Resources>";
markup += "<xctk:SolidColorBrushToColorConverter x:Key=\"SolidColorBrushToColorConverter\" />";
markup += "</Grid.Resources>";
markup += "<xctk:ColorPicker SelectedColor=\"{Binding Value, Converter={StaticResource SolidColorBrushToColorConverter}}\" DisplayColorAndName=\"True\" />";
markup += "</Grid>";
markup += "</DataTemplate>";
var retVal = XamlReader.Parse( markup ) as DataTemplate;
return retVal;
}