سؤال

وأود أن تكون قادرة على فعل شيء مثل:

<ui:Tab Title="A nice title">
  <TabTemplate>
    <asp:Literal runat="server" ID="SetMe">With Text or Something</asp:Literal>
  </TabTemplate>
</ui:Tab>

ولكن أيضا أن تكون قادرة على القيام به:

<ui:Tab Title="A nice title">
  <TabTemplate>
    <asp:DataList runat="server" ID="BindMe"></asp:DataList>
  </TabTemplate>
</ui:Tab>

الإجابة كود جئت في نهاية المطاف مع:

[ParseChildren(true)]
public class Node : SiteMapNodeBaseControl, INamingContainer
{
    private ITemplate tabTemplate;
    [Browsable(false),
    DefaultValue(null),
    Description("The tab template."),
    PersistenceMode(PersistenceMode.InnerProperty),
    TemplateContainer(typeof(TabTemplate))]
    public ITemplate TabTemplate
    {
        get { return tabTemplate; }
        set { tabTemplate = value; }
    }
    protected override void CreateChildControls()
    {
        if (TabTemplate != null)
        {
            Controls.Clear();
            TabTemplate i = new TabTemplate();
            TabTemplate.InstantiateIn(i);
            Controls.Add(i);
        }
    }
    protected override void Render(HtmlTextWriter writer)
    {
        EnsureChildControls();
        base.Render(writer);
    }
}


public class TabTemplate : Control, INamingContainer
{
}
هل كانت مفيدة؟

المحلول

والسمة ParseChildren يقول. NET سواء لعلاج الأطفال التحكم الخاصة بك كما خصائص أو ضوابط. على سبيل المثال الأول، وتريد أن علاج الأطفال والضوابط، وذلك إضافة

[ ParseChildren(ChildrenAsProperties = false) ]

لثاني، وتريد ChildrenAsProperties = صحيح، وخاصية TabTemplate من نوع ITemplate. هناك بعض السباكة تشارك بعد ذلك، والتي هذه العينة MSDN يصف. فإنه لا يضيف الكثير من القيمة إذا كنت بحاجة فقط قالب واحد، وإن كان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top