2012-05-31 63 views

Respuesta

35

¿Quiere decir que solo quiere eliminar todos los elementos secundarios?

canvas.Children.Clear(); 

parece que debería hacer el trabajo.

EDIT: Si única desea eliminar los Image elementos, puede utilizar:

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

Esto supone que todas las imágenes son directos elementos secundarios, aunque - si desea eliminar Image elementos bajo otros elementos, se vuelve más complicado.

6

Dado que la colección de elementos secundarios de un lienzo es una colección UIElementCollection y hay muchos otros controles que usan este tipo de colección, podríamos agregar el método remove a todos ellos con un método de extensión.

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++; 
     } 
    } 
} 

Cuando esta clase está presente, simplemente puede eliminar todas las imágenes (o cualquier otro tipo de objeto) con la línea.

testCanvas.Children.Remove<Image>(); 
Cuestiones relacionadas