■要件
次のようなことをしたいです。
画面1と画面2があります。
画面1は次のようになっています。なお、ChildというStackPanelは実行時に動的に生成しているものと考えてください。
<StackPanel x:Name="Parent"> <StackPanel x:Name="Child"> (コンテンツ) </StackPanel> <Button Content="hoge" /> </StackPanel>
画面2は次のようになっています。
<StackPanel x:Name="Parent"> </StackPanel>
プログラム起動時、画面1だけが表示されます。
画面1でhogeボタンを押すと画面2が開きます。
この時画面1で表示しているChildという名前のスタックパネルをコピーし、画面2を開くときにそれを画面2のParentという名前のスタックパネルに追加することで、画面1で表示しているコンテンツと同じものを画面2にも表示したいです。
■直面している問題
画面1のChildを単にコピーしてそれを画面2のParentに追加しようとした際に実行時エラー「指定された要素は、既に別の要素の論理子です。まず接続を切断してください。」が表示される。
これは画面1のChildの「コピー」が単に「参照のコピー」になっていたことが原因だと思いました。
そこで画面1のChildのコピーをディープコピーにしてみました。しかし、同じ実行時エラーが発生しました。ディープコピーはCloneメソッドを実装して行ないました。
さらに画面1のChildをディープコピーしたものについて、親への参照を取り除き(Parentプロパティがnull)試しましたが、現象は解消しませんでした。
■質問
1.問題の原因としてどのようなことが考えられますでしょうか。
2.ディープコピーについてですが、画面1のコンテンツ内に孫StackPanelが含まれているケースではそれら孫StackPanelもディープコピーされていると考えて良いのでしょうか。(子StackPanelだけがディープコピーされていて、中の孫StackPanelは参照コピーになってしまう、ということは無いという認識ですが、正しいでしょうか)
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/07 00:43 編集
2017/08/07 14:15
2017/08/07 14:21