2010-09-10 71 views
0

我已经添加了了Itemplate到Telerik的所谓SearchMenuTemplate ALA radgrid控件控制:了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的一个有效的属性。

回答

0

您的SearchMenuTemplate属性是ITemplate类型,它没有公共属性,所以智能感知不能为您的<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> 
+0

@downvoter,小心点评? – Alex 2014-03-31 15:29:42