現在、コントロールの折りたたみ状態を制御するために、ラベル(associatedControlID)と同様に動作するcollapseControlを作成しました。
次のコントロールを構築したい:
collapsableArea http://img692.imageshack.us/img692/3307/stackoverflowcollapseab.jpg
私は次のようなことを考えました:
collapsableAreaを取得するために、すでにビルドしたcollapsableControlと他のコントロール(パネルなど)を組み合わせます。
最初の試み:
私はパネルを拡張しようとし、次のことを行いました:
this.Parent.Controls.Add(collapsableControl);
しかし、これは私に与えました:「ライフサイクルステップが正しくない」、「変更できない」、「nullReference」、...例外
だから私はそれをもう一度試してみました(tagKeyがないため、より良い選択だと思います):
プレースホルダーを拡張して次のことを行いました:
this.Controls.Add(collapsableControl);
this.Controls.Add(collapsablePanel);
これにより、次のような他の問題が発生しました。パネルのテキスト、パネルのスタイルのみを設定したい...
有線!
このシナリオの解決策はありますか?
編集:
私は別の解決策を思いついた:
別の解決策http://img109.imageshack.us/img109/3307/stackoverflowcollapseab.jpg
「CollapsableArea」は「Control」タイプで、2つの追加のプライベートプロパティが含まれています。
- 「CollapsableControl」
- "パネル"
CollapsableArea.ControlsのゲッターをCollapsableArea.Panel.Controlsにリダイレクトするだけで十分だと思いました。CollapsableArea.CreateChildControls()で、CollapsableControlとPanelをインスタンス化してbase.Controlsに追加し、CollapsableArea.RenderChildren()でそれらをレンダリングします2
今の私の問題:CollapsableControlは(IDを設定せずに)clientIDを取得します-パネルに<%%>タグが含まれている場合、パネルはCollapsableControlをレンダリングしません(または渡されます)
助言がありますか?
編集: 欠落しているIDの動作を修正しました-CollapsableControl.AssociatedControlIDをPanel.ClientIDに設定するだけです...しかし-パネルに<%%>を配置すると、レンダリングされませんか?? !!