より良いカスタム コントロールのために ITemplate を使用する方法を学ぼうとしています。ほとんど機能していますが、ページからコンテナのプロパティにアクセスする方法を理解できませんでした。
ここに私のテンプレート化されたコントロールがあります:
[ParseChildren(true)]
[PersistChildren(false)]
public partial class Example : UserControl
{
private ITemplate _CustomPanelContainer;
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(CustomPanelContainer))]
[TemplateInstance(TemplateInstance.Single)]
public virtual ITemplate CustomPanel
{
get { return _CustomPanelContainer; }
set { _CustomPanelContainer = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
if (_CustomPanelContainer != null)
{
var p = new Panel();
p.ID = "CustomPanel";
Controls.Add(p);
_CustomPanelContainer.InstantiateIn(p);
}
base.CreateChildControls();
}
public class CustomPanelContainer : Panel, INamingContainer
{
private string _Test = "TESTING!";
public string TextTest
{
get
{
return _Test;
}
set
{
_Test = value;
}
}
}
}
ページの実装は次のとおりです。
<uc1:Example runat="server" ID="Example1">
<CustomPanel>
<strong>Test: </strong> <%# Container.TextTest %>
</CustomPanel>
</uc1:Example>
ほとんど動作していますが、問題は <%# Container.TextTest %> が常に空の文字列を返すことです。デバッガーで実行すると、CustomPanelContainer の TextTest プロパティ内の行にブレークポイントを設定しましたが、ブレークポイントにヒットしないため、実際にプロパティにアクセスすることはありません。
ここで何が欠けていますか?<%#Container 経由でコンテナーのパブリック プロパティへのアクセスを有効にするにはどうすればよいですか?