[英]Create custom collection for nested controls
我正在尝试创建一个控件,但我被困在我以前做过很多次的事情上,我找不到它现在不起作用的原因。 所以我在寻求帮助。
我总是用 javascript 和 css 自己创建自定义导航菜单,效果很好。 但是我想如果我尝试为它制作一个基本的 class 控件,那么我将不需要再添加所有 javascript 并且控件只为我做,所以我正在设置一些基础知识,但由于某种原因我不能获取集合以获取我的项目中的嵌套控件。
我有3节课。
[ParseChildren(true)]
[PersistChildren(false)]
public class ScriptMenu : Control
{
private ScriptMenuItem _rootItem;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ScriptMenuItemCollection Items
{
get
{
if (_rootItem == null)
_rootItem = new ScriptMenuItem();
return _rootItem.Items;
}
}
}
这只是基本的 ScriptMenu,稍后我将其设为脚本控件,但现在这是基本的 class。
public class ScriptMenuItem
{
private ScriptMenuItemCollection _items;
public ScriptMenuItem()
{
_items = new ScriptMenuItemCollection();
}
[PersistenceMode(PersistenceMode.InnerProperty)]
public ScriptMenuItemCollection Items => _items;
}
这是应该为导航按钮添加的项目
public class ScriptMenuItemCollection : IList<ScriptMenuItem>, ICollection<ScriptMenuItem>
{
private List<ScriptMenuItem> _list;
public ScriptMenuItemCollection()
{
_list = new List<ScriptMenuItem>();
}
public ScriptMenuItem this[int index] { get => _list[index]; set => _list[index] = value; }
public int Count => _list.Count;
public bool IsReadOnly => false;
public void Add(ScriptMenuItem item)
{
_list.Add(item);
}
public void Clear()
{
_list.Clear();
}
public bool Contains(ScriptMenuItem item) => _list.Contains(item);
public void CopyTo(ScriptMenuItem[] array, int arrayIndex)
{
_list.CopyTo(array, arrayIndex);
}
public IEnumerator<ScriptMenuItem> GetEnumerator() => _list.GetEnumerator();
public int IndexOf(ScriptMenuItem item) => _list.IndexOf(item);
public void Insert(int index, ScriptMenuItem item)
{
_list.Insert(index, item);
}
public bool Remove(ScriptMenuItem item) => _list.Remove(item);
public void RemoveAt(int index)
{
_list.RemoveAt(index);
}
IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator();
}
现在这是一个自定义集合。 我需要一个自定义集合,因为我需要能够在底层项目之间传递一些参数并到达父项目,但这是我的问题开始的地方。
在 HTML 我得到
<custom:ScriptMenu runat="server" ID="ScriptMenu">
<Items />
</custom:ScriptMenu>
出于某种原因,项目标签总是关闭,如果我让它自动打开,那么他将无法识别我的 ScriptMenuItem。 我知道错误出在某个地方是我的自定义集合,但我看不出我做错了什么。 我已经从互联网上得到了大量的例子,但似乎没有一个对我有用。
我真的希望有人可以向我展示这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.