我已经向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的有效属性。
发布于 2011-03-04 21:21:46
您的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>https://stackoverflow.com/questions/3687717
复制相似问题