我在Telerik的RadGrid控件中添加了一个ITemplate,名为SearchMenuTemplate ala:
public class AbsRadGrid : RadGrid
{
private ITemplate _ItemTemplate;
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(searchBar))]
public ITemplate SearchMenuTemplate
{
get { return _ItemTemplate; }// get
set { _ItemTemplate = value; }// set
}
}
Template类看起来像(为简洁起见,省略了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的有效属性。
答案 0 :(得分: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>