【发布时间】:2010-12-15 09:51:45
【问题描述】:
目前我已经构建了一个collapseControl,它的行为类似于一个标签(associatedControlID)来控制一个控件的折叠状态。
我想要构建的以下控件:
collapsableArea http://img692.imageshack.us/img692/3307/stackoverflowcollapseab.jpg
我想到了类似的东西:
将我已经构建的 collapsableControl 和其他一些控件(例如面板)放在一起以获得 collapsableArea。
第一次尝试:
我尝试扩展面板并执行以下操作:
this.Parent.Controls.Add(collapsableControl);
但这给了我:“不正确的生命周期步骤”,“无法修改”,“nullReference”,......异常
所以我又试了一次(我认为这是更好的选择,因为没有 tagKey):
我扩展了一个占位符并执行了以下操作:
this.Controls.Add(collapsableControl);
this.Controls.Add(collapsablePanel);
这导致了其他问题,例如:我只想设置面板的文本,面板的样式,...
有线!
对于这种情况你有什么解决方案吗?
编辑:
我想出了另一个解决方案:
another solution http://img109.imageshack.us/img109/3307/stackoverflowcollapseab.jpg
“CollapsableArea”属于“Control”类型,包含 2 个额外的私有属性:
- “可折叠控件”
- “面板”
我认为将 CollapsableArea.Controls 的 getter 重定向到 CollapsableArea.Panel.Controls 就足够了。在 CollapsableArea.CreateChildControls() 我实例化并添加 CollapsableControl 和 Panel 到 base.Controls 并在 CollapsableArea.RenderChildren() 渲染那些 2
我现在的问题: CollapsableControl 将获得一个 clientID(不设置 ID) - 面板不会 如果面板包含 -tags
,则呈现 CollapsableControl 将失败(或传递出去)有什么建议吗?
编辑: 我修复了丢失 ID 的行为 - 只需将 CollapsableControl.AssociatedControlID 设置为 Panel.ClientID... 但是 - 当将 放入面板时,它不会被渲染??!!
【问题讨论】:
标签: asp.net collapse web-controls asp.net-webcontrol