Not quite sure why this is happening, but I want to change the XNA color value:
private Color _color = Color.White; [System.ComponentModel.Category("VisibleInEditor")] [System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))] public Color Color { get { return _color; } set { _color = value; } }
I thought the ExpandableObjectConverter attribute would fix the problem, but he hadn't done it yet.
Edit: I was able to copy the following working code:
public class ColorTypeConverter : ExpandableObjectConverter { public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType) { return destinationType == typeof(Color); } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType) { if (destinationType == typeof(string) && value is Color) { Color color = (Color)value; return string.Format("{0}, {1}, {2}, {3}", color.R, color.G, color.B, color.A); } else return base.ConvertTo(context, culture, value, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType) { return sourceType == typeof(string); } public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { try { string strVal = value as string; var parts = strVal.Split(','); byte r = byte.Parse(parts[0]); byte g = byte.Parse(parts[1]); byte b = byte.Parse(parts[2]); byte a = byte.Parse(parts[3]); return new Color(r, g, b, a); } catch { throw new ArgumentException("Can not convert '" + (string)value + "'to type Color"); } } else return base.ConvertFrom(context, culture, value); } public override object CreateInstance(ITypeDescriptorContext context, System.Collections.IDictionary propertyValues) { return new Color((byte)propertyValues["R"], (byte)propertyValues["G"], (byte)propertyValues["B"], (byte)propertyValues["A"]); } public override bool GetCreateInstanceSupported(ITypeDescriptorContext context) { return true; } public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value, attributes); string[] sortOrder = new string[4]; sortOrder[0] = "R"; sortOrder[1] = "G"; sortOrder[2] = "B"; sortOrder[3] = "A";