2012-05-31 28 views

risposta

35

Vuoi dire che vuoi solo rimuovere tutti gli elementi figlio?

canvas.Children.Clear(); 

sembra che dovrebbe fare il lavoro.

EDIT: Se solo desidera rimuovere le Image elementi, è possibile utilizzare:

var images = canvas.Children.OfType<Image>().ToList(); 
foreach (var image in images) 
{ 
    canvas.Children.Remove(image); 
} 

Questo presuppone tutte le immagini sono diretti elementi figli anche se - se si desidera rimuovere Image elementi sotto altri elementi, diventa più complicato.

6

Poiché la raccolta di elementi secondari di una tela è una UIElementCollection e ci sono molti altri controlli che utilizzano questo tipo di raccolta, è possibile aggiungere a tutti il ​​metodo di rimozione con un metodo di estensione.

public static class CanvasExtensions 
{ 
    /// <summary> 
    /// Removes all instances of a type of object from the children collection. 
    /// </summary> 
    /// <typeparam name="T">The type of object you want to remove.</typeparam> 
    /// <param name="targetCollection">A reference to the canvas you want items removed from.</param> 
    public static void Remove<T>(this UIElementCollection targetCollection) 
    { 
     // This will loop to the end of the children collection. 
     int index = 0; 

     // Loop over every element in the children collection. 
     while (index < targetCollection.Count) 
     { 
      // Remove the item if it's of type T 
      if (targetCollection[index] is T) 
       targetCollection.RemoveAt(index); 
      else 
       index++; 
     } 
    } 
} 

Quando questa classe è presente si può semplicemente rimuovere tutte le immagini (o qualsiasi altro tipo di oggetto) con la linea.

testCanvas.Children.Remove<Image>(); 
Problemi correlati