C# RemoveFromVisualTree是否将所有子控件设置为空?

C# RemoveFromVisualTree是否将所有子控件设置为空?,c#,wpf,xaml,C#,Wpf,Xaml,FrameWorkElement.RemoveFromVisualTree()是否删除父控件的所有子控件或将其设置为null 比如说 两者之间有区别吗 var s = (LayoutGroup)sender; foreach (var child in s.Children) { child = null; } s.RemoveFromVisualTree(); 及 RemoveVisualChild删除两个视觉对象之间的父子关系。与将两个引用都设置为null

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

比如说 两者之间有区别吗

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


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

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

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

与跟踪对象关系、资源和可包含任何类型的对象的逻辑树不同


此处的更多信息:

它也会从可视化树中删除子级(显然),但不会将它们设置为null-如果没有对它们的错误引用,它们最终将被垃圾收集。@slugster但我可以循环调用它们并将其设置为null,然后再调用RemoveFromVisualTree()?@slugster请检查我的编辑,我加了一些code@user1590636我们真的在谈论这种视觉上的方法吗?
var s = (LayoutGroup)sender;
 s.RemoveFromVisualTree();