实现如下:
<smic:Note runat=server ID='NoteInfo'>
<b>Development Tools</b>
<br />
C#, JAVA, PHP
</smic:Note>
代码片段:
[ToolboxBitmap(typeof(Label))]
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[ToolboxData("<{0}:Note runat=\"server\"></{0}:Note>"), DefaultProperty("Message"), ParseChildren(false), Designer("System.Web.UI.Design.WebControls.LabelDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[ControlBuilder(typeof(LabelControlBuilder)), ControlValueProperty("Message"), DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class Note : WebControl
{
[PersistenceMode(PersistenceMode.InnerDefaultProperty), Bindable(true), Localizable(true)]
public string Message
{
get { return ViewState["Message"] as string; }
set { ViewState["Message"] = value; }
}
protected override void AddParsedSubObject(object obj) // 必须 Override WebControl 的 AddParsedSubObject 方法
{
if (this.HasControls())
{
base.AddParsedSubObject(obj);
}
else if (obj is LiteralControl)
{
this.Message = ((LiteralControl)obj).Text;
}
else
{
string message = this.Message;
if (message.Length != 0)
{
this.Message = string.Empty;
base.AddParsedSubObject(new LiteralControl(message));
}
base.AddParsedSubObject(obj);
}
}
protected override void Render(HtmlTextWriter output)
{
output.AddAttribute("class", "container");
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.Write(this.Message);
output.RenderEndTag();
}
}