如果我们从可视化和逻辑树中删除TextBox
,这行是否会泄漏?
对我来说这是泄漏,因为Mouse.MouseDown
在myHandler
上有一个引用,并且没有做任何事情来删除处理程序。
<TextBox Mouse.MouseDown="myHandler" />
我不确定,因为这段代码很常见。
答案 0 :(得分:2)
泄漏了吗? XAML直接转换为以下代码(请参阅obj目录中生成的Window1.g.cs文件)
((System.Windows.Controls.TextBlock)(target)).AddHandler(System.Windows.Input.Mouse.MouseDownEvent, new System.Windows.Input.MouseButtonEventHandler(this.TextBlock_MouseDown));
所以,实际发生的是我们在TextBlock中添加了“this”(在我的例子中是Window1的实例)的引用。您在XAML中看到的语法实际上是为路由事件或附加事件附加RoutedEvent处理程序的语法。只是语法使它看起来像你正在分配一些引用。请看一下:Routed Events Overview和Attached Events Overview。
编辑:总之,它不泄漏。 :)
Edit2:如果你有任何TextBlock的引用,这将泄漏。但是如果当你关掉TextBlock时,你确保没有更多的元素引用,你会没事的。