Domanda

Come posso personalizzare l'ordinamento delle categorie in un PropertyGrid ?

Se imposto uno dei seguenti ...

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

... quindi le categorie saranno alfabetizzate. ("Alfabetico" sembra applicarsi alle proprietà all'interno di ciascuna categoria.) Se utilizzo PropertySort.NoSort , perdo la categorizzazione.

Sto popolando il mio PropertyGrid con SelectObject , il che è abbastanza semplice:

this.propertyGrid1.SelectedObject = options;

opzioni è un'istanza di una classe con proprietà adeguatamente decorate:

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

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

Ho alcune dozzine di proprietà in mezza dozzina di categorie.

Esiste un modo per regolare l'ordinamento delle categorie preservando la mia facilità d'uso con SelectedObject ?

È stato utile?

Soluzione

Se vuoi dire che vuoi che le categorie siano ordinate in un modo specifico (non alfabetico), allora no - non penso che tu possa farlo. Potresti provare VisualHint - mi aspetto che abbia questo (dal momento che puoi cogliere molto più controllo).

Altri suggerimenti

Penso che questo link sia utile http://bytes.com/groups/ net-c / 214.456-q-ordinazione-cernita categoria-text-PropertyGrid

  

Non credo che ci sia un modo per farlo. L'unica cosa che potevo   scopri che potresti essere in grado di fare questo è PropertySort   proprietà. Se non lo si imposta su nessuno, viene indicato che le proprietà vengono visualizzate   nell'ordine in cui sono ricevuti dal descrittore del tipo. Potresti essere   in grado di creare un descrittore di tipo proxy tra l'oggetto e il   propertygrid, che restituirebbe non solo le proprietà nel modo corretto   ordine, ma le proprietà con le categorie nell'ordine desiderato   li in ...

Come ha detto @Marc Gravel in la sua risposta , non c'è nulla nel framework che permetta questo comportamento. Qualsiasi soluzione sarà un hack. Detto questo, puoi usare la soluzione suggerita da @Shahab in la sua risposta come soluzione alternativa ma non indica davvero la tua intenzione a chiunque mantenga il tuo codice. Quindi penso che il meglio che puoi fare sia creare un Attributo che erediti da CategoryAttribute per gestire il processo per te:

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))
    {
    }
}

Quindi puoi usarlo come tale

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

Assicurati solo di impostare la proprietà PropertyGrid UseCompatibletextRendering su true per eliminare i caratteri non stampabili per te e il < code> PropertySort impostato su Categorized o CategorizedAlphabetical e dovresti essere pronto per andare.

Una piccola variazione del trucco '\ t' sopra descritto, l'ho appena provato con caratteri di ritorno a capo ('\ r'). Sembra funzionare ed evita il problema della descrizione dei comandi causato dallo spazio aggiuntivo introdotto da una scheda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top