假设我有一个带文本框的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)?
答案 0 :(得分:-1)
您想要处理FrameworkElement.Closed事件 - 只有在从DependencyObject中显式删除触发器时才会调用OnDetached。