Comment la classe de contrôle, fournir les ForeColor, BackColor et les valeurs par défaut de police?
-
23-09-2019 - |
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 !!!
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.