Dans WPF: Children.Remove ou Children.Clear ne libère pas d'objets

Mise à jour: j'ai essayé sur un autre, plus proprement installé, la machine. Je ne pouvais pas reproduire ce sur cette machine. Si je trouve ce que la récidive (VSStudio) composant est à l'origine de cela, je vais vous laisser savoir.

Je créer un certain UIElements de code derrière et a anticiper la collecte des ordures pour effacer les trucs. Cependant, les objets ne sont pas libres-ed au moment où je m'y attendais. Je m'attendais à être freeed à RemoveAt(0), mais ils ne sont libérés à la fin du programme.

Comment rendre les objets d'être libéré lorsqu'il est retiré de la collection d'Enfants de la Toile?

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
    MouseDown="Window_MouseDown">
  <Grid>
    <Canvas x:Name="main" />
  </Grid>
</Window>

Le code derrière est:

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();
  }

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
  GC.Collect(); //This should pick up the control removed at a previous MouseDown
  GC.WaitForPendingFinalizers(); //Doesn't help either

  if (main.Children.Count == 0)
    main.Children.Add(new MyControl() { Background = Brushes.Yellow, Width = 100, Height = 50 });
  else
    main.Children.RemoveAt(0);
 }
}

public class MyControl : UserControl
{
  ~MyControl()
  {
    Debug.WriteLine("Goodbye");
  }
}

source d'informationauteur Bart Roozendaal