删除并释放WPF内容控制的内存

时间:2018-06-05 14:56:00

标签: c# wpf contentcontrol

我生成一个ContentControls的动态recursiv结构。

<ContentControl
             x:Class="MyContentControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d">
    <StackPanel>
        <ItemsControl x:Name="ChildPanel"/>
        <Button x:Name="Remove" Content="Remove"></Button>
    </StackPanel>
</ContentControl>

ChildControl在后​​面的代码中填充了许多ContentControl个。如果我从ChildControl删除其中一个项目,则垃圾收集器不会删除已删除的ContentControl。 我是否必须在其他地方释放该物品?

public partial class MyContentControl : ContentControl
{
    public MyContentControl() : this(false)
    {

    }

    public MyContentControl(bool lastItem)
    {
        InitializeComponent();
        if (!lastItem)
        {
            ChildPanel.Items.Add(new MyContentControl(true));
        }

        Remove.Click += Remove_Click;
    }

    private void Remove_Click(object sender, RoutedEventArgs e)
    {
        while(ChildPanel.Items.Count > 0)
        {
            ((MyContentControl)ChildPanel.Items[0]).Remove.Click -= Remove_Click;
            ChildPanel.Items.RemoveAt(0);
        }
    }
}

0 个答案:

没有答案