Если вы не хотите наследовать напрямую от WebControl, а не от Panel, самый простой способ сделать это - украсить класс атрибутом [ParseChildren(false)]
. Хотя на первый взгляд это может означать, что вы не хотите разбирать детей, на самом деле false
указывает на то, что вы не хотите, чтобы дети рассматривались как свойства. Вместо этого вы хотите, чтобы они рассматривались как элементы управления.
Используя этот атрибут, вы получаете практически все функциональные возможности из коробки:
[ToolboxData("<{0}:RoundedBox runat=server></{0}:RoundedBox>")]
[ParseChildren(false)]
public class RoundedBox : WebControl, INamingContainer
{
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.Write("<div class='roundedbox'>");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.Write("</div>");
}
}
Это позволит вам добавить элементы управления RoundedBox на ваши страницы и добавить дочерние элементы (элементы управления asp.net или необработанный HTML), которые будут отображаться внутри вашего div.
Конечно, CSS будет добавлен, чтобы правильно оформить класс закругленной коробки.