テキスト ボックスを持つ Silverlight ユーザー コントロールがあるとします。
<TextBox>
<ii:KeyTrigger Key="Enter">
<!-- something here -->
</ii:KeyTrigger>
</TextBox>
ユーザー コントロールをルート コンテンツ コントロールに挿入します。
root.Content = new MyUserControl();
MyUserControl の "Loaded" イベントが発生すると、KeyTrigger が TextBox に接続されることがわかりました。
AssociatedObject.KeyDown+=SomethingHere;
この場合、AssociatedObject は TextBox になります。
イベントは、KeyTrigger の OnDetaching メソッドのオーバーロードでサブスクライブされていません。問題は、OnDetaching がいつ呼び出されているか分からないことです...誰でもこれに光を当てることができますか?
ユーザー コントロールの新しいインスタンスをルート コンテンツに挿入するボタンがあります。
root.Content = new MyUserControl();
これが発生するたびに、新しいインスタンスで "Loaded" イベントが発生し、KeyTrigger のイベントが呼び出されますが、"古い" ユーザー コントロール インスタンスに対して OnDetaching は呼び出されません... これによりメモリ リークが発生しませんか? コントロールがビジュアル ツリーから消えると、OnDetaching (デタッチ) が呼び出されますか?