1

FrameWorkElement.RemoveFromVisualTree()親のすべての子コントロールを削除するか、それらを null に設定しますか?

たとえば、違いはありますか

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

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

1 に答える 1

3

RemoveVisualChild は、2 つのビジュアル間の親子関係を削除します。両方の参照を null に設定するのと同じです。これは@slugsterが言及したように、ビジュアルでGCをトリガーしません。

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

WPF でビジュアル ツリーと論理ツリーを混同している可能性もあります。

ビジュアル ツリーは、コントロールに関連するビジュアル オブジェクトの構造を記述します。各オブジェクトは に基づいていSystem.Windows.Media.Visualます。テンプレートを追加またはオーバーライドしてコントロールの外観を変更する場合、ビジュアル ツリーを使用しています。

オブジェクトの関係、リソースを追跡し、任意のタイプのオブジェクトを含めることができる論理ツリーとは対照的に。

詳細はこちら: WPF のツリー

于 2013-07-31T20:32:55.320 に答える