在 WPF 和 WinRT 中,众所周知,行为不会可靠地调用它们的 Detach 方法。避免内存泄漏的唯一方法是订阅 AssociatedObject 的 Unloaded 事件并取消挂钩所有事件(示例)。
到目前为止它有效。
但我意识到(就像其他评论我链接的博客条目的人一样)以这种方式卸载的行为再也不会附加。以 MenuFlyout 为例。如果有附加到 MenuFlyoutItem 的行为,则会在 MenuFlyoutItem 关闭时将其卸载。如果您再次打开菜单,它将不会重新附加。
这也发生在其他用户控件上。尽管重新创建了所有控件,但在我的 WinRT 应用程序中从一个页面导航到另一个页面并再次返回时,我“丢失”了行为。我看不到如何在 WinRT 应用程序中使用它们,在该应用程序中,通过导航重新创建了许多控件。
有什么已知的解决方案吗?