Удаление всех Ellipse на Canvas

247
03 июня 2017, 13:50

Имеются эллипсы на Canvas:

void Ellipses(double x, double y)
{
    var e = new Ellipse()
    {
        Height = 10,
        Width = 10,
        Fill = new SolidColorBrush(Color.FromRgb(124, 109, 177)),
        Name ="A"
    };
    canvas.Children.Add(e);
    Canvas.SetLeft(e, x - 5);
    Canvas.SetBottom(e, y - 5);
    list.Add(e);
}

Хочу их удалить. Но проблема в том, что он удаляет не все, а как то пропускает их через одного

void DeleteEllipse()
{
    //foreach (UIElement item in canvas.Children)
    //{
    //    if (item is Ellipse)
    //        canvas.Children.Remove(item);
    //}
    for (int i = 0; i < canvas.Children.Count; i++)
    {
        if (canvas.Children[i] is Ellipse)
            canvas.Children.RemoveAt(i);
    }
}

Почему эллипсы удаляется через один или через два?

Answer 1

Проще всего не возиться с индексами, с риском ошибиться, а удалить всех одним махом:

canvas.Children.Clear();

Если не-эллипсы нужно оставить, попробуйте так:

foreach (var el in canvas.Children.OfType<Ellipse>().ToList())
    canvas.Children.Remove(el);

ToList важен.

READ ALSO
Произвольный цвет фона и рамки для TextBox

Произвольный цвет фона и рамки для TextBox

Как мне из такого поля:

283
Активность кнопки при условии - C#

Активность кнопки при условии - C#

Как мне сделать кнопку активной если заполнено поле textBox1 ?

263
ObservableCollection, сортировка на лету

ObservableCollection, сортировка на лету

Есть ObservableCollection, которая прибинжена к GridViewВнутри нее объекты, у каждого есть свойство Index

494
EnableRaisingEvents выдает ошибку

EnableRaisingEvents выдает ошибку

Здравствуйте, я хочу получать уведомления о записи новых событий в журнал "Безопасность", но возникает ошибка доступа к рееструРугается именно...

332