Buenas, ando liado haciendo un editor para una interfaz grafica que estoy haciendo en XNA.
Estoy usando un PropertyGrid para acceder a las propiedades y modificarlas.
Pero me he encontrado con un problema, tengo una clase StyleCollection que contiene los estilos que puedo aplicar a los controles y me gustaria que se desplegara mostrnado los diversos estilos, como cuando despliegas las propiedades de una fuente, pero no consigo hacerlo.
Y luego viene el tema del Style, qur tb me gustaria que se deplegara con los colores.
(http://game.estanuestraweb.com/inspector.png)
Bueno, seguire indagando....
public class StyleCollection
{
public Style Normal { get { return Styles[(int)StyleType.Normal]; } }
public Style Over { get { return Styles[(int)StyleType.Over]; } }
public Style Pressed { get { return Styles[(int)StyleType.Pressed]; } }
public Style Disabled { get { return Styles[(int)StyleType.Disabled]; } }
public Style Hidden { get { return Styles[(int)StyleType.Hidden]; } }
public event Action StyleTransitionEnded;
public event Action StyleTypeChanged;
}
public class Style
{
public event Action Changed;
public Color BorderColor { get { return _BorderColor; } set { _BorderColor = value; OnChanged(); } }
public Color BackgroundColor { get { return _BackgroundColor; } set { _BackgroundColor = value; OnChanged(); } }
public Color ImageColor { get { return _ImageColor; } set { _ImageColor = value; OnChanged(); } }
public Color TextColor { get { return _TextColor; } set { _TextColor = value; OnChanged(); } }
public Color BackgroundTextColor { get { return _BackgroundTextColor; } set { _BackgroundTextColor = value; OnChanged(); } }
public float TransitionDuration { get { return _TransitionDuration; } set { _TransitionDuration = value; OnChanged(); } }
}
public abstract class GuiControl
{
public ControlCollection Controls { get; private set; }
public Skin Skin { get; set; }
public StyleCollection Styles { get; private set; }
....
}
Bueno, ya lo tengo,
[TypeConverter(typeof(ExpandableObjectConverter))]
public StyleCollection Styles { get; private set; }
Pero como muestra cosas que no quiero que muestre, he creado una clase derivada de ExpandableObjectConverter que muestra solo lo que yo quiero.
public class StyleCollectionConverter : ExpandableObjectConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
StyleCollection stylesCollection = value as StyleCollection;
if (stylesCollection == null) return (null);
List<PropertyDescriptor> propertyCollection = new List<PropertyDescriptor>();
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
foreach (PropertyDescriptor prop in properties)
{
if (prop.PropertyType == typeof(StyleType) || prop.PropertyType == typeof(Style))
{
propertyCollection.Add(prop);
}
}
properties = new PropertyDescriptorCollection(propertyCollection.ToArray());
return (properties);
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return (true);
}
}