Свойства Itemplate недоступны в качестве атрибутов

Я добавил ITemplate в элемент управления Radrikrid Telerik под названием 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.

1 ответ

Ваш 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>
Другие вопросы по тегам