2013-01-13 28 views
0

我已經在循環中動態創建了一系列圖像,以及每個圖像的動畫和故事板,並且我正在尋找在動畫完成後刪除圖像。圖像,動畫和故事板存儲在數組中以供參考。C#在完成事件中引用動態創建的圖像

動畫有不同的持續時間,畫布上還有其他元素,我不想刪除。

這是我必須生成圖像,動畫和故事代碼:

for (int i = 0; i < apples.Length; i++) 
{ 
    Image apple = new Image(); 
    apple.Source = new BitmapImage(new Uri(@"pack://application:,,,/fall;component/Resources/apple.png")); 
    apple.Height = 48; 
    apple.Width = 48; 

    int x = r.Next(5, (int)cGame.ActualWidth - 53); 
    int y = (int)cGame.ActualHeight - 48; 

    Canvas.SetLeft(apple, x); 
    Canvas.SetTop(apple, y); 

    apples[i] = apple; 

} 

for(int i = 0; i < speeds.Length; i++) 
{ 
    DoubleAnimation speed = new DoubleAnimation(); 
    speed.From = 0; 
    speed.To = cGame.ActualHeight; 
    speed.Duration = new TimeSpan(0, 0, 0, 0, r.Next(2, 6) * 500); 

    speeds[i] = speed; 
    speeds[i].Completed += new EventHandler(aniComplete); 
} 

for (int i = 0; i < sbs.Length; i++) 
{ 
    Storyboard sb = new Storyboard(); 
    sb.Children.Add(speeds[i]); 
    Storyboard.SetTarget(speeds[i], apples[i]); 
    Storyboard.SetTargetProperty(speeds[i], new PropertyPath(TopProperty)); 

    sbs[i] = sb; 
} 

到目前爲止,我已經創建了一個完成的事件,並將其連接到每個動畫。我使用此刪除元素:

canvas.Children.RemoveAt(1); 

但它只是按順序刪除元素,跳過我想保留的元素。這些動畫隨機運行並具有隨機的持續時間,因此這些元素很容易就可以按順序完成其動畫。

我將如何引用已完成事件中的特定元素?我嘗試引用發件人,但我不知道我應該把它作爲(UIElement)似乎沒有工作。

回答

0

你可以創建一個lambda expression捕捉合適的變量Completed事件處理程序,即Canvas和適當的圖像控制:

speeds[i].Completed += (o, e) => canvas.Children.Remove(apples[i]); 

請參閱變量的作用域在Lambda表達式部分Lambda Expressions瞭解更多信息。

相關問題