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 (Detach)?

4

1 回答 1

-1

您想要处理 FrameworkElement.Closed 事件 - 只有在触发器从其 DependencyObject 中显式删除时才会调用 OnDetached。

于 2010-08-27T15:04:05.647 回答