Я мало знаю о WPF, но в Silverlight или WP7 дети Storyboard
имеют тип TimeLine
.Также у самого StoryBoard будет событие Completed
, к которому вы будете привязаны.Поэтому, по крайней мере, первая часть кода будет выглядеть так: -
private void storyboard_Completed(object sender, EventArgs e)
{
Storyboard sb = (Storyboard)sender;
DoubleAnimation completedAnimation = (DoubleAnimation)sb.Children[0];
Теперь для хитрого бита.
На самом деле весьма необычно для Storyboard.SetTarget
использование в коде Silverlight.Я предполагаю, что игровой код с большей вероятностью будет генерировать элементы и анимацию в коде и, следовательно, с большей вероятностью будет использовать SetTarget
.Если это то, что вы хотите сделать, то вам нужно будет создать собственное присоединенное свойство, которое имеет как Get, так и Set, с измененным обратным вызовом для этого свойства, вызвать Storyboard.SetTarget
.
Вот код: -
public static class StoryboardServices
{
public static DependencyObject GetTarget(Timeline timeline)
{
if (timeline == null)
throw new ArgumentNullException("timeline");
return timeline.GetValue(TargetProperty) as DependencyObject;
}
public static void SetTarget(Timeline timeline, DependencyObject value)
{
if (timeline == null)
throw new ArgumentNullException("timeline");
timeline.SetValue(TargetProperty, value);
}
public static readonly DependencyProperty TargetProperty =
DependencyProperty.RegisterAttached(
"Target",
typeof(DependencyObject),
typeof(Timeline),
new PropertyMetadata(null, OnTargetPropertyChanged));
private static void OnTargetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Storyboard.SetTarget(d as Timeline, e.NewValue as DependencyObject);
}
}
Теперь код SetTarget
станет: -
StoryboardServices.SetTarget(completedAnimation, bomb);
Тогда завершенное событие может получить цель с помощью: -
Bomb completedBomb = (Bomb)StoryboardServices.GetTarget(completedAnimation);