何时实际调用 IAttachedObject.Detach() (KeyTrigger.Detaching()) 方法?

Posted

技术标签:

【中文标题】何时实际调用 IAttachedObject.Detach() (KeyTrigger.Detaching()) 方法?【英文标题】:When IAttachedObject.Detach() (KeyTrigger.Detaching()) method is actually called? 【发布时间】:2010-08-27 14:17:29 【问题描述】:

假设我有一个带有文本框的 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)?

【问题讨论】:

【参考方案1】:

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

【讨论】:

Silverlight 或 WPF 中没有 FrameworkElement.Closed 事件:msdn.microsoft.com/en-us/library/…

以上是关于何时实际调用 IAttachedObject.Detach() (KeyTrigger.Detaching()) 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何知道片段何时在 viewpager 中实际可见

如何确定何时显示 UICollectionViewCell?

在哪些系统中实际使用了远程过程调用?

何时在方法内创建传入的参数的副本,何时不?

实际示例何时使用抽象类以及何时使用 Java 8 引入的接口(默认和静态方法)[重复]

何时使用 openGL 将数据发送到 GPU