Chi volesse ridefinire la proprietà Text di uno UserControl si accorgerebbe che il valore assegnato in fase di design non viene assoulutamente persistito.Il problema è relativo al fatto che tale proprietà è decorata in modo che in fase di design Visual Studio la nasconda, Browsable(false), e non ne persista il valore, DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden). Sebbene la documentazione non indichi tale limitazione usando un tool di reflection - esempio Reflector - possiamo scoprire la completa decorazione (e relative limitazioni) della proprietà.
| [EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Bindable(false)] public override string Text { get; set; } |
Segue un esempio di UserControl in cui viene ridefinita (override) la proprietà Text e ri-decorata in modo da garantirne navigazione e persistenza anche a design.
| class UserColtrol1: UserControl { //... //Proprietà rimappata sulla proprietà Text della Label1 contenuta. [Browsable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public override string Text { get { return label1.Text; } set { label1.Text = value; } } } |
È bene ricordare che la proprietà andrebbe anche decorata - per uniformità agli standard - con gli attributi DescriptionAttribute, CategoryAttribute e DefaultValueAttribute.