RemoveFromVisualTree将所有子控件设置为null

本文关键字:设置 null 控件 RemoveFromVisualTree | 更新日期: 2023-09-27 18:25:44

FrameWorkElement.RemoveFromVisualTree()是否删除父控件的所有子控件或将其设置为null?

例如之间有区别吗

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

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

RemoveFromVisualTree将所有子控件设置为null

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

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

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

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

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

更多信息请点击此处:WPF 中的树