Pregunta

¿Cómo puedo personalizar la clasificación de categorías en un PropertyGrid ?

Si configuro alguno de los siguientes ...

propertyGrid.PropertySort = PropertySort.Categorized;
propertyGrid.PropertySort = PropertySort.CategorizedAlphabetical;

... entonces las categorías estarán alfabetizadas. ("Alfabético" parece aplicarse a las propiedades dentro de cada categoría). Si uso PropertySort.NoSort , pierdo la categorización.

Estoy completando mi PropertyGrid con SelectObject , lo cual es bastante fácil:

this.propertyGrid1.SelectedObject = options;

options es una instancia de una clase con propiedades adecuadamente decoradas:

    [CategoryAttribute("Category Title"),
    DisplayName("Property Name"),
    Browsable(true),
    ReadOnly(false),
    BindableAttribute(true),
    DesignOnly(false),
    DescriptionAttribute("...")]
    public bool PropertyName {
        get {
            // ...
        }

        set {
            // ...
            this.OnPropertyChanged("PropertyName");
        }
    }

Tengo unas pocas docenas de propiedades en media docena de categorías.

¿Hay alguna forma de ajustar el orden de clasificación de categoría y al mismo tiempo preservar mi facilidad de uso con SelectedObject ?

¿Fue útil?

Solución

Si quiere decir que quiere que las categorías se clasifiquen de una manera específica (no alfabética), entonces no, no creo que pueda hacerlo. Es posible que desee probar VisualHint - Espero que tenga esto (ya que puede tomar mucho más control).

Otros consejos

Creo que este enlace es útil http://bytes.com/groups/ net-c / 214456-q-ordering-sorting-category-text-propertygrid

  

No creo que haya una manera de hacer esto. Lo único que pude   Encontrar que indica que es posible que pueda hacer esto es el PropertySort   propiedad. Si lo establece en ninguno, dice que se muestran las propiedades   en el orden en que se reciben del descriptor de tipo. Usted podría ser   capaz de crear un descriptor de tipo proxy entre su objeto y el   propertygrid, que luego devolvería no solo las propiedades en el correcto   orden, pero las propiedades con las categorías en el orden que desee   ellos en ...

Como dijo @Marc Gravel en su respuesta , no hay nada en el marco que permita este comportamiento. Cualquier solución será un truco. Dicho esto, puede usar la solución sugerida por @Shahab en su respuesta como una solución alternativa, pero eso no Indique realmente su intención a cualquiera que mantenga su código. Así que creo que lo mejor que puedes hacer es crear un Attribute personalizado que herede de CategoryAttribute para manejar el proceso por ti:

public class CustomSortedCategoryAttribute : CategoryAttribute
{
    private const char NonPrintableChar = '\t';

    public CustomSortedCategoryAttribute(   string category,
                                            ushort categoryPos,
                                            ushort totalCategories)
        : base(category.PadLeft(category.Length + (totalCategories - categoryPos),
                    CustomSortedCategoryAttribute.NonPrintableChar))
    {
    }
}

Entonces puedes usarlo como tal

[CustomSortedCategory("Z Category",1,2)]
public string ZProperty {set;get;}
[CustomSortedCategory("A Category",2,2)]
public string AProperty {set;get;}

Solo asegúrese de establecer la propiedad PropertyGrid en UseCompatibletextRendering en true para eliminar los caracteres no imprimibles para usted y el < code> PropertySort establecido en Categorized o CategorizedAlphabetical y debería estar listo para comenzar.

Una pequeña variación en el truco '\ t' descrito anteriormente, simplemente lo probé con caracteres de retorno de carro ('\ r'). Parece funcionar y evita el problema de la información sobre herramientas causado por el espacio adicional introducido por una pestaña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top