ループ内の一連の画像と、それぞれのアニメーションとストーリーボードを動的に作成しました。アニメーションが完了したら、画像を削除したいと考えています。画像、アニメーション、ストーリーボードは、参照用に配列に保存されます。
アニメーションの長さは異なり、キャンバスには削除したくない要素が他にもあります。
これは、画像、アニメーション、ストーリーボードを生成するために必要なコードです。
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)が機能していないようであるため、キャスト先がわかりません。