我正在创建一个用户控件,其中有一个名为Items的属性。 Items的类型为LibraryPanelBarItemCollection(自定义类),其中包含LibraryPanelBarItem对象的集合。我希望能够在设计时使用VS用于添加诸如treenodes / listviewitems之类的东西的Collection编辑器来添加它们。理想情况下,我也可以声明性地将它们添加到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>
答案 0 :(得分:0)
以下内容应指向正确的方向。如果您需要任何进一步的细节,请随时发表评论。
<ToolboxData("<{0}:LibraryPanelBar runat=""server""> </{0}:LibraryPanelBar>")>
Public Class LibraryPanelBar
Inherits HierarchicalDataBoundControl
Private _Items As New LibraryPanelBarItemCollection()
<PersistenceMode(PersistenceMode.InnerProperty)> _
<MergableProperty(False)> _
<Editor("WebApplicationVB1.TreeNodeCollectionEditor,WebApplicationVB1", GetType(UITypeEditor))> _
Public ReadOnly Property Items As LibraryPanelBarItemCollection
Get
Return _Items
End Get
End Property
Protected Overrides Sub PerformSelect()
End Sub
Protected Overrides Sub ValidateDataSource(dataSource As Object)
End Sub
Protected Overrides Sub RenderContents(writer As System.Web.UI.HtmlTextWriter)
writer.RenderBeginTag(HtmlTextWriterTag.Ul)
For Each item As LibraryPanelBarItem In Items
writer.RenderBeginTag(HtmlTextWriterTag.Li)
RenderContentsRecursive(writer, item)
writer.RenderEndTag() ' Li
Next
writer.RenderEndTag() ' Ul
End Sub
Private Sub RenderContentsRecursive(writer As System.Web.UI.HtmlTextWriter, item As LibraryPanelBarItem)
writer.Write(item.Text)
writer.WriteBreak()
writer.RenderBeginTag(HtmlTextWriterTag.Ul)
For Each subItem As LibraryPanelBarItem In item.Items
writer.RenderBeginTag(HtmlTextWriterTag.Li)
RenderContentsRecursive(writer, subItem)
writer.RenderEndTag() ' Li
Next
writer.RenderEndTag() ' Ul
End Sub
End Class
<ParseChildren(True, "Items")> _
Public Class LibraryPanelBarItem
Implements IStateManager, ICloneable
Private _Items As New LibraryPanelBarItemCollection()
<BindableAttribute(True)> _
Public Property ImageUrl As String
<BindableAttribute(True)> _
Public Property NavigateUrl As String
Public Property Text As String
Public Property Disabled As Boolean
<Browsable(False)> _
<PersistenceMode(PersistenceMode.InnerDefaultProperty)> _
Public ReadOnly Property Items As LibraryPanelBarItemCollection
Get
Return _Items
End Get
End Property
Public ReadOnly Property HasChildren() As Boolean
Get
If Items.Count > 0 Then
Return True
Else
Return False
End If
End Get
End Property
Public ReadOnly Property IsTrackingViewState As Boolean Implements System.Web.UI.IStateManager.IsTrackingViewState
Get
Throw New NotImplementedException()
End Get
End Property
Public Sub LoadViewState(state As Object) Implements System.Web.UI.IStateManager.LoadViewState
Throw New NotImplementedException()
End Sub
Public Function SaveViewState() As Object Implements System.Web.UI.IStateManager.SaveViewState
Throw New NotImplementedException()
End Function
Public Sub TrackViewState() Implements System.Web.UI.IStateManager.TrackViewState
Throw New NotImplementedException()
End Sub
Public Function Clone() As Object Implements System.ICloneable.Clone
Throw New NotImplementedException()
End Function
End Class
Public Class LibraryPanelBarItemCollection
Inherits CollectionBase
Implements IStateManager
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 ReadOnly Property IsTrackingViewState As Boolean Implements System.Web.UI.IStateManager.IsTrackingViewState
Get
Throw New NotImplementedException()
End Get
End Property
Public Sub LoadViewState(state As Object) Implements System.Web.UI.IStateManager.LoadViewState
Throw New NotImplementedException()
End Sub
Public Function SaveViewState() As Object Implements System.Web.UI.IStateManager.SaveViewState
Throw New NotImplementedException()
End Function
Public Sub TrackViewState() Implements System.Web.UI.IStateManager.TrackViewState
Throw New NotImplementedException()
End Sub
End Class
Public Class LibraryPanelBarItemCollectionEditor
Inherits System.Drawing.Design.UITypeEditor
Public Overrides Function EditValue(context As System.ComponentModel.ITypeDescriptorContext, provider As System.IServiceProvider, value As Object) As Object
Return MyBase.EditValue(context, provider, value)
End Function
Public Overrides Function GetEditStyle(context As System.ComponentModel.ITypeDescriptorContext) As System.Drawing.Design.UITypeEditorEditStyle
Return MyBase.GetEditStyle(context)
End Function
End Class
编辑:添加了UI集合编辑器示例。