はい、これを行うことができます。クラス インターフェイスからコントロールを継承CompositeControl
し、通常の ASP.NET サーバー コントロールでこれを行うのと同じ方法で、ACT プロジェクトから任意のエクステンダまたはコントロールを Controls コレクションに追加するだけです。また、既存のコントロールを継承してINamingContainer
インターフェイスを実装することもできますが、この場合、コントロールのメソッドRenderChildren
からメソッドを手動で呼び出す必要があります。Render
[DefaultProperty("Text")]
[ToolboxData("<{0}:WatermarkedTextBox runat=server></{0}:WatermarkedTextBox>")]
public class WatermarkedTextBox : TextBox, INamingContainer
{
private AjaxControlToolkit.TextBoxWatermarkExtender _watermarkExtender;
public string WatermarkText
{
get
{
return ViewState["WatermarkText"] as string;
}
set
{
ViewState["WatermarkText"] = value;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
this._watermarkExtender = new AjaxControlToolkit.TextBoxWatermarkExtender
{
ID = "wte",
TargetControlID = this.ID,
WatermarkText = this.WatermarkText
};
this.Controls.Add(_watermarkExtender);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
RenderChildren(writer);
}
}
}