1

テキスト ボックスを持つ 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 (デタッチ) が呼び出されますか?

4

1 に答える 1

-1

FrameworkElement.Closed イベントを処理したい - OnDetached は、トリガーがその DependencyObject から明示的に削除されたときにのみ呼び出されます。

于 2010-08-27T15:04:05.647 に答える