Свойства Itemplate недоступны в качестве атрибутов - PullRequest
0 голосов
/ 10 сентября 2010

Я добавил 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 Ответ

0 голосов
/ 04 марта 2011

Ваше свойство 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>
...