0

我在 Telerik 的 RadGrid 控件中添加了一个名为 SearchMenuTemplate ala 的 ITemplate:

    public class AbsRadGrid : RadGrid
{

    private ITemplate _ItemTemplate;
    [PersistenceMode(PersistenceMode.InnerProperty)]
    [TemplateContainer(typeof(searchBar))]
    public ITemplate SearchMenuTemplate
    {
        get { return _ItemTemplate; }// get
        set { _ItemTemplate = value; }// set
    }
}

模板类看起来像(为简洁起见,省略了像 createchildcontrol 这样的强制覆盖方法):

[ParseChildren(true)]
class searchBar : CompositeControl, INamingContainer
{
    public string rbStartsWithText { get; set; }
}

现在,在源代码控制窗口中,RadGrid 控件看到了模板。但是 rbStartsWithText 不是节点上的属性。

我想看到这样的东西(注意:abs 前缀是在标记中注册的):

    <abs:AbsRadGrid ID="rg" runat="server">
    <SearchMenuTemplate rbStartsWithText="Starts With" />
</abs:AbsRadGrid>

相反,rbStartsWithText 抛出一个绿色波浪形并告诉我它不是 SearchMenuTemplate 的有效属性。

4

1 回答 1

0

您的SearchMenuTemplate属性属于ITemplate没有公共属性的类型,因此 IntelliSense 无法为您的<SearchMenuTemplate>标签提供任何属性。

为了能够添加自定义属性,您应该实现ITemplate接口(InstantiateIn方法)并在那里添加所需的属性:

public class YourCustomTemplate : ITemplate
{
    public string rbStartsWithText { get; set; }

    public void InstantiateIn(Control container)
    {
        HtmlGenericControl div = new HtmlGenericControl("div");
        div.InnerText = rbStartsWithText;
        container.Controls.Add(div);
    }
}

然后你可以使用它你的自定义网格:

public class AbsRadGrid : RadGrid
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public YourCustomTemplate  SearchMenuTemplate { get; set; }
}

最后:

<abs:AbsRadGrid ID="rg" runat="server">
    <SearchMenuTemplate rbStartsWithText="Starts With" />
</abs:AbsRadGrid>
于 2011-03-04T13:21:45.890 回答