Удаление элементов программным способом в Silverlight - PullRequest
0 голосов
/ 12 мая 2010

Я начинаю изучать silverlight и на практике занимаюсь простой видеоигрой типа космических захватчиков.

Моя проблема заключается в том, что я создаю пользовательские элементы управления (маркеры) программным способом так:

if(shooting)
{
    if(currBulletRate == bulletRate)
    {
        Bullet aBullet = new Bullet();

        aBullet.X = mouse.X - 5;
        aBullet.Y = mouse.Y - Ship.Height;
        aBullet.Width = 10;
        aBullet.Height = 40;
        aBullet.Tag = "Bullet";

        LayoutRoot.Children.Add(aBullet);

        currBulletRate = 0;
    }
    else
        currBulletRate++;
}

Однако у меня возникают проблемы с их удалением, как только они выходят за пределы (оставьте LayoutRoot).

Я пытался зацикливаться на LayoutRoot.Children и удалять, но, похоже, я не могу понять это правильно.

1 Ответ

2 голосов
/ 12 мая 2010
UIElement[] tmp = new UIElement[LayoutRoot.Children.Count];             
LayoutRoot.Children.CopyTo(tmp, 0);  

foreach (UIElement aElement in tmp)
{
    Shape aShape = aElement as Shape; 

    if (aShape != null && aShape.Tag != null)
    {

        if (aShape.Tag.ToString().Contains("Bullet"))
        {
            if (Canvas.GetTop(aShape) + aShape.ActualHeight < 0) // This checks if it leaves the top
            {
                LayoutRoot.Children.Remove(aElement);
            }
            else if(Canvas.GetTop(aShape) > Canvas.ActualHeight) // This condition checks if it leaves the bottom
            {
                LayoutRoot.Children.Remove(aElement);
            }
        }
    }
}

Код, который вы вставили, проверял только то, покинула ли пуля верх холста.

...