是FrameWorkElement.RemoveFromVisualTree()
删除父级的所有子控件还是将它们设置为null?
之间有区别吗?
var s = (LayoutGroup)sender;
foreach (var child in s.Children)
{
child = null;
}
s.RemoveFromVisualTree();
和
var s = (LayoutGroup)sender;
s.RemoveFromVisualTree();
答案 0 :(得分:3)
RemoveVisualChild删除两个视觉效果之间的父子关系。与将两个引用设置为null相同。这提到@slugster不会在Visuals上触发GC。
http://msdn.microsoft.com/en-us/library/system.windows.media.visual.removevisualchild.aspx
我认为你也可能在WPF中混淆了Visual Tree和Logical Tree。
可视化树描述了与控件相关的可视对象的结构,每个对象都基于System.Windows.Media.Visual
。当您更改控件的外观时,添加或覆盖模板,您正在使用可视树。
与跟踪对象关系的逻辑树相反,资源可以包含任何类型的对象。
此处有更多信息:Trees in WPF