【问题标题】:When IAttachedObject.Detach() (KeyTrigger.Detaching()) method is actually called?何时实际调用 IAttachedObject.Detach() (KeyTrigger.Detaching()) 方法?
【发布时间】: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)?

【问题讨论】:

    标签: silverlight xaml blend


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多