【发布时间】:2012-03-08 19:14:34
【问题描述】:
我正在创建一个用户控件,其中有一个名为 Items 的属性。 Items 的类型为 LibraryPanelBarItemCollection(自定义类),其中包含 LibraryPanelBarItem 对象的集合。我希望能够在设计时使用 VS 用于添加诸如树节点/列表视图项之类的东西的集合编辑器来添加这些。理想情况下,我还可以以声明方式将它们添加到 html 语法中。我可以让 Items 属性显示出来,但我没有智能感知来在开始标签和结束标签之间添加项目。
在我的用户控件中,我使用属性声明了以下属性
<ParseChildren(True, "Items")> _
Public Class LibraryPanelBar
Inherits System.Web.UI.UserControl
<PersistenceMode(PersistenceMode.InnerDefaultProperty)> _
<Browsable(True)> _
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
Public Property Items As LibraryPanelBarItemCollection
...Do Some Stuff...
End Class
这是我的 LibraryPanelBarItem 和 LibraryPanelBarItemCollection 的自定义类
Public Class LibraryPanelBarItem
<BindableAttribute(True)> _
Public Property ImageUrl As String
<BindableAttribute(True)> _
Public Property NavigateUrl As String
Public Property Text As String
Public Property Disabled As Boolean
Public Property ID As String
<PersistenceMode(PersistenceMode.InnerDefaultProperty)> _
Public Property Items As LibraryPanelBarItemCollection
Public ReadOnly Property HasChildren() As Boolean
Get
If Items.Count > 0 Then
Return True
Else
Return False
End If
End Get
End Property
Public Sub New()
Items = New LibraryPanelBarItemCollection
End Sub
End Class
Public Class LibraryPanelBarItemCollection
Inherits CollectionBase
Default Public ReadOnly Property Item(Index As Integer) As LibraryPanelBarItem
Get
Return DirectCast(List(Index), LibraryPanelBarItem)
End Get
End Property
Public Function Contains(itemType As LibraryPanelBarItem) As Boolean
Return List.Contains(itemType)
End Function
Public Function Add(itemType As LibraryPanelBarItem) As Integer
Return List.Add(itemType)
End Function
Public Sub Remove(itemType As LibraryPanelBarItem)
List.Remove(itemType)
End Sub
Public Sub Insert(index As Integer, itemType As LibraryPanelBarItem)
List.Insert(index, itemType)
End Sub
Public Function IndexOf(itemType As LibraryPanelBarItem) As Integer
Return List.IndexOf(itemType)
End Function
Public Sub New()
End Sub
End Class
这是我当前在 aspx 文件中的声明:
<uc1:LibraryPanelBar ID="LibraryPanelBar2" runat="server">
<Items>
</Items>
</uc1:LibraryPanelBar>
【问题讨论】:
-
首先,您是否打算让
LibraryPanelBarItem拥有可能的自身递归列表? -
是的,一个LibraryPanelBarItems 可以有一个LibraryPanelBarItems 的集合。我在这里尝试创建的是一种用于导航的菜单/Outlook 栏。
标签: asp.net .net vb.net user-controls