2009-04-13 5 views
3

J'utilise un PropertyGrid pour afficher les propriétés personnalisées qui sont exposées via l'implémentation de ICustomTypeDescriptor.Texte en italique dans un PropertyGrid

Mes objets sont configurés dans une arborescence et les valeurs de chaque propriété sont définies dans chaque objet ou héritées d'objets parents. Dans le PropertyGrid, je veux montrer visuellement à l'utilisateur quelles valeurs de propriétés sont définies dans l'objet sélectionné et lesquelles sont héritées des objets parents.

En ce moment je montre chaque propriété il deux catégories. Un ensemble montre à quoi correspond la valeur dans l'objet réel, avec un champ vide s'il n'est pas défini. L'autre ensemble affiche les valeurs de propriété affectées à l'objet qui sont définies dans l'objet ou héritées si elles ne sont pas définies dans l'objet.

Je voudrais combiner ces deux groupes en un achat montrant les propriétés d'ensemble dans le texte ordinaire, et les valeurs héritées en texte en italique. Cependant, il ne semble pas y avoir moyen de le faire via ICustomTypeDescriptor.GetProperties(). Et je n'ai pas un accès facile aux propriétés de PropertyGrid puisqu'elles sont créées pendant l'exécution du programme.

Répondre

3

Vous ne pouvez pas faire d'italique - mais vous pouvez faire en gras; le comportement gras est déterminé par le PropertyDescriptorShouldSerializeValue; vous pouvez envelopper PropertyDescriptor s via diverses astuces System.ComponentModel (ICustomTypeDescriptor, TypeConverter ou TypeDescriptionProvider) et fournir le vôtre PropertyDescriptor.

Alternativement, il existe des grilles similaires avec plus d'options, telles que by VisualHint - voir "Personnalisation des propriétés" sur cette page.

+0

Donc, si un PropertyDescriptor renvoie true pour ShouldSerialize(), la propriété sera en gras? Ce n'est pas la véritable intention de cette méthode, n'est-ce pas? Si je suis déjà en train de sérialiser ces objets à l'aide de DataContractSerializer, le fait de jouer avec cette méthode risque-t-il de changer la façon dont mes objets sont également sérialisés? –

+0

Cela dépend ... XmlSerializer (mais pas, AFAIL, DataContractSerializer) reconnaît le modèle par son nom, mais il n'utilise pas PropertyDescriptor. Si vous utilisez des descripteurs d'exécution (plutôt qu'un public 'bool ShouldSerialize *()' alors ça devrait aller, mais à vous ... –

Questions connexes