2015-03-18 1 views
0

J'essaye d'implémenter un WebControl composite personnalisé avec des propriétés "imbriquées", c'est-à-dire, encapsuler un groupe de propriétés dans une classe.ASP.NET Custom WebControl Propriétés imbriquées en tant qu'objet

Par exemple, dans ce contrôle composite, j'ai placé un bouton. Je voudrais pouvoir encapsuler des propriétés pertinentes pour le bouton dans une classe (par exemple, buttonText, buttonStyle, etc.). Cela rendrait la définition des propriétés dans multi-bouton/contrôle composite-contrôle plus facile et cohérente et intuitive.

Remarque: Je souhaite que les propriétés encapsulées apparaissent groupées dans la boîte de dialogue Propriétés de VisualStudio, d'une manière très similaire à Style/Police.

Exemple:

public class fooButtonProperties 
{ 
    [Category("Appearance"), Description("URL for the Profile page")] 
    public string URL { get; set; } 

    [Category("Appearance"), Description("Text to display"), DefaultValue("Profile")] 
    public string ButtonText { get; set; } 

    /// <summary> 
    /// Position of the control on the page, default is Right-Aligned 
    /// </summary> 
    [Category("Appearance"), Description("Position in the Header"), DefaultValue(PIONEERFramework.Web.UI.WebControls.PageHeaderFooter.Classes.DesignEnum.DesignLayoutEnums.HorizontalPositions.Right)] 
///Here is the composite control 
    public PIONEERFramework.Web.UI.WebControls.PageHeaderFooter.Classes.DesignEnum.DesignLayoutEnums.HorizontalPositions PositionInHeader { get; set; } 
} 
public class myCustomClass: System.Web.UI.WebControls.CompositeControl 
{ 
    protected System.Web.UI.HtmlControls.HtmlLink myButton; 
    [Category("Appearance")] 
    public fooButtonProperties myButtonProperties { get { return _profileButtonProp; } } 
    private fooButtonProperties _myeButtonProp; 

    #region Constructor 
    public myCustomClass() 
    { 
     this._myeButtonProp = new fooButtonProperties(); 
    } 
    #endregion 
} 

Malheureusement, cette approche dos fonctionne pas. La nouvelle propriété myButtonProperties n'apparaît pas du tout dans la boîte de dialogue "Properies".

Répondre

0

Pour créer une propriété imbriqué utiliser l'attribut System.ComponentModel.DesignerSerializationVisibility dans votre commande comme ceci:

[Category("Appearance")] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
public fooButtonProperties myButtonProperties { get { return _profileButtonProp; } } 

Le nom de la propriété finale sera « myButtonProperties-URL » (avec un trait d'union). Vous pouvez également ajouter cet attribut aux propriétés de votre classe fooButtonProperties pour encore plus d'imbrication.
Notez que vous devrez peut-être fermer le fichier aspx et reconstruire la solution pour actualiser la fenêtre Propriétés.

L'attribut Category fonctionne dans votre contrôle et dans votre classe imbriquée.

L'attribut Description pour les descriptions semble correct MAIS cela ne fonctionne pas, ce qui pourrait être un bogue dans Visual Studio. J'ai trouvé ce lien: https://www.beta.microsoft.com/VisualStudio/feedback/details/653335/webcontrol-property-descriptions-do-not-appear-in-property-window

J'ai aussi observé qu'aucune propriété ne montre des descriptions.

Cordialement
Oli