OK I figured it out.
I approached it from a different angle. I said, "Well if
System.Web.UI.WebControls.Table can do it, why am I having a problem?"
I looked at the TableDesigner class and saw that it wasn't doing
anything special, so I took a look at Table itself.
I saw that it used
ParseChildren(True, "Rows"), DefaultProperty("Rows")
and didn't specify PersistChildren.
I tried to do the same substituting "Controls" for "Rows". I got an
error in design-time stating that the "Controls" property could not be
programmatically set at design-time.
So what did the Rows property on Table do? It ultimately is a surrogate
property for the Controls Property. It returns a TableRowsCollection
which inherits from ControlCollection. So basically it is the Controls
Property being worked on by proxy.
A-ha! :)
OK, so what If I made a surrogate property called Content?
All it did was return the Controls property. Would that work as
expected? The answer is a resounding yes!
[VB.Net]
<ParseChildren(True, "Content"), PersistChildren(False), _
DefaultProperty("Content"), Designer(GetType(MyDesigner))> _
Public Class MyControl
Inherits WebControl
'Collect Controls from innerHtml, hide from UI/code.
<PersistenceMode(PersistenceMode.InnerDefaultProperty), _
MergableProperty(False), _
Browsable(False), EditorBrowsable(EditorBrowsableState.Never)> _
Public Readonly Property Content As ControlCollection
Get
Return Me.Controls
End Get
End Property
End Class
One of the weird things about this was setting PersistChildern to false.
Intellisense states 'true to persist the child controls as server
control tags; otherwise, false' which seems contradictory to what I
wanted, but after thinking about it, I guess that worked out OK.
*** Sent via Developersdex
http://www.developersdex.com ***