2012-04-04 16 views
1

まず、この例外は実際にはわかりません。なぜ私はこのオブジェクトを何回も複製できないはずですか?それはポイントではない:"要素は既に別の要素の子です。"

私はリストを使用します。私はサイトに移動するたびに、それがこれを行う必要があります。

(App.Current as App).recent.ForEach(x => container.Children.Add(x)); 

(コンテナ=別のStackPanel)

初めて、それが動作します。その後、質問文に例外が表示されます。私は既にリストボックスを使ってみましたが、私はただArgumentExceptionを取得しました。私はこれらの例外は同じソースを持っていると思うが、私は何が間違っているのか分からない。

おかげ

答えて

10

を助けてくださいエラーは非常に明確である:WPF/SLコントロールは一度に1つの親コントロールに属することができます。

ページから移動する場合は、親からコントロールを削除するか、このForEachで新しいコントロールを作成する(おそらくクローンする)必要があります。

+0

の代わりにOnNavigatingFromを上書きした方がよいのサスペンドにあるときに明確な子供を回避するために、それをナビゲートするときに完全に新しい作成されたページではありませんか?私はリストをコピーしようとします。 – roqstr

+0

ターゲットページは作成されますが、古いページはすぐに破棄されません。あなたの例外はそのことを証明しています。 –

+0

困惑しますが、私はそれを得ません 私はそのようなリストを複製しようとします: リストキャッシュ=新しいリスト((App.Currentとしてのアプリケーション)。 しかし、私はまだこの例外を取得 – roqstr

1

ページに移動すると、古いインスタンスは即座に削除されないため、新しいページにコントロールを追加すると、古いページが破損していない場合でも古いページで使用されて例外が発生する可能性があります。

StackPanelを空にするためにページを離れるときに呼び出されるOnNavigatedFrom(NavigationEventArgs e)およびOnNavigatingFrom(NavigatingCancelEventArgs e)メソッドをオーバーライドしてみてください。

たとえば、あなたが行うことができます:

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    base.OnNavigatedFrom(e); 
    container.Children.Clear(); 
} 
0

はあなたがページから移動するとき、コンテナの子を削除する必要があります。しかし、ナビゲーションが中断のためである場合はそうではありません。ナビゲーションが原因OnNavigatedFrom

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
    { 
     container.Children.Clear(); 
     base.OnNavigatingFrom(e); 
    } 
関連する問題