Question

Je sais que modèle de composant indique si une propriété a une valeur par défaut ou non, au moyen de méthode ShouldSerializeValue de PropertyDescriptor .

La base de fenêtres-formes classe Control, a des propriétés comme ForeColor, BackColor et Font , que par défaut la même valeur de la société mère, mais je ne pouvais pas trouver TypeDescriptor ou PropertyDescriptor qui fournit ces les valeurs par défaut. La classe de contrôle ne met pas en œuvre ICustomTypeDescriptor ni a un TypeDescriptionProviderAttribute.

Comment fonctionne la classe de contrôle indique que ces propriétés doivent être sérialisés ou non? Où est-il fournir les propertyDescriptors pour ces propriétés ??

Merci !!!

Était-ce utile?

La solution

Ils n'ont des valeurs par défaut. Ces propriétés sont des propriétés « ambiantes ». La classe de contrôle détecte qu'une affectation de propriété a eu pour eux. Si cela n'a jamais eu lieu, il utilise la propriété correspondante du parent. Ce qui est agréable, il assure les contrôles enfants utilisent les mêmes couleurs et font que leur contenant.

Il existe une méthode ShouldSerializeForeColor () dans la classe de contrôle. Il est interne et ne peut être remplacé par le code utilisateur. Idem pour les autres propriétés. Jetez un oeil-voir avec réflecteur ou .NET source de référence.

Le MSDN Library documents eux comme ceci:

  

contrôles Windows Forms utilisent ambiante   propriétés afin de contrôle des enfants peuvent   apparaissent comme leur entourage   environnement. Une propriété ambiante est un   contrôler les biens qui, sinon défini, est   récupéré à partir du contrôle parental. Si   le contrôle ne dispose pas d'un parent,   et la propriété est pas définie, la   contrôle tente de déterminer le   La valeur de la propriété ambiant à travers   la propriété du site. Si le contrôle est   pas SITED, si le site ne   support propriétés ambiantes, ou si le   la propriété est pas définie sur le   AmbientProperties, les utilisations de contrôle   ses propres valeurs par défaut. En règle générale, un   propriété ambiante représente un   caractéristique d'un contrôle, tel que   BackColor, qui est communiquée à un   le contrôle des enfants. Par exemple, un bouton   aura le même BackColor que son   Formulaire parent par défaut. Ambiant   propriétés fournies par le contrôle   classe comprend: curseur, police,   BackColor, ForeColor et RightToLeft.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top