Свойства 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>