Quantcast
Channel: Extended WPF Toolkit™ Community Edition
Viewing all articles
Browse latest Browse all 4964

New Post: Showing Color for Brush property in the property grid

$
0
0
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 :
<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;
    }

Viewing all articles
Browse latest Browse all 4964

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>