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();