1

是否FrameWorkElement.RemoveFromVisualTree()删除父级的所有子控件或将它们设置为空?

例如有没有区别

var s = (LayoutGroup)sender;
 foreach (var child in s.Children)
    {
       child = null;
    }
 s.RemoveFromVisualTree();

var s = (LayoutGroup)sender;
 s.RemoveFromVisualTree();
4

1 回答 1

3

RemoveVisualChild 删除两个视觉对象之间的父子关系。与将两个引用都设置为 null 相同。正如@slugster 提到的,这不会触发视觉对象上的 GC。

http://msdn.microsoft.com/en-us/library/system.windows.media.visual.removevisualchild.aspx

我认为您也可能将 WPF 中的可视树和逻辑树混为一谈。

视觉树描述了与控件相关的视觉对象的结构,每个对象都基于System.Windows.Media.Visual. 当您更改控件的外观时,添加或覆盖您正在使用可视树的模板。

与跟踪对象关系的逻辑树相反,资源可以包含任何类型的对象。

更多信息:WPF 中的树

于 2013-07-31T20:32:55.320 回答