何时实际调用 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()) 方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何确定何时显示 UICollectionViewCell?