我知道当您将对象注册到鼠标的附加事件时,您会发生内存泄漏.这就是你需要使用WeakEvent模式的原因.
我对此模式有疑问:如果要使用它,则无法在XAML代码中定义处理程序.
对我而言,这意味着每个代码都会泄漏:
<SomeControl Mouse.MouseDown="MyHandler" />
Run Code Online (Sandbox Code Playgroud)
除非你在代码中显式删除你的处理程序(我怀疑有人这样做).现在有一些我不明白的东西:
<Button Click="MyHandler" />
Run Code Online (Sandbox Code Playgroud)
此代码以某种方式使用Mouse.MouseDown事件的某处来检测按钮上的单击.通过对反射器的一些研究,我发现这个事件使用了UIElement类的MouseDown.当我读到UIElement的代码时,我不明白:没有WeakEventManager!
有人可以解释一下UIElement如何从Mouse.MouseDown接收没有泄漏的事件?