Я создал простой элемент управления под названием Menu:
namespace MyControls
{
public class MenuItem
{
public MenuItem()
{
Visible = true;
}
[Localizable(true)]
public string Text { get; set; }
[Localizable(false)]
public string Link { get; set; }
[DefaultValue(true)]
public bool Visible { get; set; }
}
public class MenuDesigner : System.Web.UI.Design.ControlDesigner
{
...
}
[ParseChildren(true, "Items")]
[PersistChildren(false)]
[Designer(typeof(MenuDesigner))]
public class Menu : Control
{
...
public Menu()
{
}
...
private List<MenuItem> _items = new List<MenuItem>();
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<MenuItem> Items
{
get
{
return _items;
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
... // More Controls.
list = new BulletedList();
list.DisplayMode = BulletedListDisplayMode.HyperLink;
this.Controls.Add(list);
foreach (var mi in _items)
{
list.Items.Add(new ListItem(mi.Text, Page.Request.CreateUrl(mi.Link)));
}
}
}
}
Я использую это на своей странице следующим образом:
<my:Menu ID="menu" runat="server" Text="MenuTitle">
<my:MenuItem Text="text" Link="link1.aspx">
</my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx">
</my:MenuItem>
</my:Menu>
Это работает. Нет проблем. Когда я переключаюсь в представление Designer, я вижу элемент управления в том виде, как его отображает мой MenuDesigner. Переформатирование с помощью CTRL-K, CTRL-D работает. Запуск моей веб-страницы отображается в Menu так, как я ожидал.
Но: когда я нажимаю в DesingView пункт меню «Инструменты» -> «Создать локальный ресурс», я получаю такой результат:
<my:Menu ID="menu" runat="server" Text="MenuTitle"
meta:resourcekey="menuResource9">
<my:MenuItem Text="text" Link="link1.aspx">
</my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx">
</my:MenuItem>
<Items>
<my:MenuItem Text="text" Link="link1.aspx" meta:resourcekey="MenuItemResource10"></my:MenuItem>
<my:MenuItem Text="text2" Link="link2.aspx" meta:resourcekey="MenuItemResource11"></my:MenuItem>
</Items>
</my:Menu>
Какие атрибуты отсутствуют / неверны? Я посмотрел на ListBox, который также анализирует дочерние элементы, и у меня есть ощущение, что мой элемент управления делает то же самое.
Единственные различия, которые я нашел:
- Я использую общий список, ListBox имеет свой собственный тип коллекции для ListItems
- У меня нет редактора или ControlBuilder или TypeConverter для моего MenuItem, ListBox делает.
Это не тот элемент управления, который я готов продать, а только для меня. Мне не нужен редактор или редактор, я пишу разметку HTML / ASP.NET вручную.
Я использую Visual Studio 2008, .NET 3.5.
Спасибо за любые подсказки, помощь или решения!