C# ASP.NET自定义WebControl嵌套属性作为对象

C# ASP.NET自定义WebControl嵌套属性作为对象,c#,asp.net,web-controls,C#,Asp.net,Web Controls,我试图实现一个带有“嵌套”属性的自定义复合WebControl,即将一组属性封装到一个类中 例如,在这个复合控件中,我放置了一个按钮。我希望能够将按钮的相关属性封装到一个类中(例如buttonText、buttonStyle等)。这将使在多按钮/控件复合控件中定义属性更容易、一致且直观 注意:我希望封装的属性以非常类似于样式/字体的方式显示在VisualStudio的“属性”对话框中 样本: public class fooButtonProperties { [Category("Ap

我试图实现一个带有“嵌套”属性的自定义复合WebControl,即将一组属性封装到一个类中

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

注意:我希望封装的属性以非常类似于样式/字体的方式显示在VisualStudio的“属性”对话框中

样本:

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
}
public类fooButtonProperties
{
[类别(“外观”)、说明(“个人资料页面的URL”)]
公共字符串URL{get;set;}
[类别(“外观”)、说明(“要显示的文本”)、默认值(“配置文件”)]
公共字符串ButtonText{get;set;}
/// 
///控件在页面上的位置,默认为右对齐
/// 
[类别(“外观”)、描述(“标题中的位置”)、默认值(preferenceframework.Web.UI.WebControls.PageHeaderFooter.Classes.DesignEnum.designlayoutunes.HorizontalPositions.Right)]
///这是复合控件
public framework.Web.UI.WebControls.PageHeaderFooter.Classes.DesignEnum.designLayoutunes.HorizontalPositionsPositionInHeader{get;set;}
}
公共类myCustomClass:System.Web.UI.WebControl.CompositeControl
{
受保护的System.Web.UI.HtmlControls.htmlink myButton;
[类别(“外观”)]
public fooButtonProperties myButtonProperties{get{return{U profileButtonProp;}}
私人FoobutonProperties_MyeButontop;
#区域构造函数
公共myCustomClass()
{
这。_myeButtonProp=newfoobuttonproperties();
}
#端区
}

不幸的是,这种方法不起作用。新属性myButtonProperties根本不会出现在“属性”对话框中

要创建嵌套属性,请使用控件中的
System.ComponentModel.DesignerSerializationVisibility
属性,如下所示:

[Category("Appearance")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public fooButtonProperties myButtonProperties { get { return _profileButtonProp; } }
最后的属性名将是“myButtonProperties URL”(带连字符)。您还可以将此属性添加到
fooButtonProperties
类中的属性,以进行更多嵌套。
请注意,您可能需要关闭aspx文件并重新生成解决方案以刷新“属性”窗口

Category
属性在控件和嵌套类中起作用

描述的
Description
属性似乎正确,但不起作用,这可能是Visual Studio中的一个错误。我找到了这个链接:

我还观察到没有属性显示描述

问候
奥利