我正在尝试使用“嵌套”属性实现自定义复合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
}
不幸的是,这种方法不起作用。新属性myButtonProperties在“Properies”对话框中根本不显示。
答案 0 :(得分: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
此外,我发现没有任何属性显示描述。
问候
奥利