RemoveFromVisualTree是否将所有子控件设置为null?

时间:2013-07-31 13:21:56

标签: c# wpf xaml

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

例如,

之间有区别吗?
var s = (LayoutGroup)sender;
 foreach (var child in s.Children)
    {
       child = null;
    }
 s.RemoveFromVisualTree();

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

1 个答案:

答案 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