2015-03-18 53 views
0

我试图用“嵌套”属性实现自定义复合WebControl,即将一组属性封装到类中。作为对象的ASP.NET自定义WebControl嵌套属性

例如,在这个复合控件中,我放置了一个按钮。我希望能够将按钮的相关属性封装到类中(例如,buttonText,buttonStyle等)。这将使得多按钮/控件组合控件中的定义属性更加容易且一致且直观。

注:我想封装的属性出现在VisualStudio中的属性对话框中,以与Style/Font非常相似的方式分组。

样品:

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 
} 

不幸的是,这种做法DOS无法正常工作。新属性myButtonProperties完全不出现在“Properies”对话框中。

回答

0

要创建一个嵌套属性使用System.ComponentModel.DesignerSerializationVisibility属性在你的控制是这样的:

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

的最后一个属性的名称将是“myButtonProperties-URL”(连字符)。您还可以将此属性添加到fooButtonProperties类中的属性中,以实现更多嵌套。
请注意,您可能必须关闭aspx文件并重新构建解决方案才能刷新“属性”窗口。

Category属性适用于您的控件和嵌套类。

描述的Description属性似乎是正确的,但它不起作用,这可能是Visual Studio中的错误。我发现这个链接: https://www.beta.microsoft.com/VisualStudio/feedback/details/653335/webcontrol-property-descriptions-do-not-appear-in-property-window

此外,我观察到没有任何属性显示说明。

Regards
Oli