我有多个基于xaml的页面作为画布的子项存储在另一个页面上。我在应用程序运行时添加和删除子页面。但是,从子集合中删除的页面仍在运行并响应键盘快捷方式。如何强制删除旧页面?
答案 0 :(得分:2)
当您显示XAML页面时,您是否正在注册键盘事件? 如果是这样,当您从屏幕上删除这些页面时,您是否忘记从键盘事件中取消注册?
由于Silverlight中的UserControl或Page类上没有类似“卸载”的事件(至少我知道),我所做的是让我的页面实现一个我定义的接口,它包含一个像“清理“或”关闭“。在我从屏幕上删除控件之前,我在控件上调用Cleanup()并让它执行取消注册可能已注册的事件的操作。
如果您不从事件中取消注册,则页面的对象永远不会被垃圾收集,因为CLR认为该对象仍处于活动状态。