Ho creato una sottoclasse semplice di StackPanel
che è possibile spostare sullo schermo utilizzando un TranslateTransform
animato. Ecco come si presenta:Perché queste animazioni non funzionano quando utilizzo uno storyboard?
public class MovingStackPanel : StackPanel
{
public void BeginMove(Point translatePosition)
{
RenderTransform = new TranslateTransform();
Duration d = new Duration(new TimeSpan(0, 0, 0, 0, 400));
DoubleAnimation x = new DoubleAnimation(translatePosition.X, d);
DoubleAnimation y = new DoubleAnimation(translatePosition.Y, d);
/*
Storyboard.SetTarget(x, RenderTransform);
Storyboard.SetTargetProperty(x, new PropertyPath("X"));
Storyboard.SetTarget(y, RenderTransform);
Storyboard.SetTargetProperty(y, new PropertyPath("Y"));
Storyboard sb = new Storyboard();
sb.Children.Add(x);
sb.Children.Add(y);
sb.Completed += sb_Completed;
sb.Begin();
*/
RenderTransform.BeginAnimation(TranslateTransform.XProperty, x);
RenderTransform.BeginAnimation(TranslateTransform.YProperty, y);
}
void sb_Completed(object sender, EventArgs e)
{
Console.WriteLine("Completed.");
}
}
E qui è il mio problema: Se io animare le proprietà X e Y direttamente, come il codice di cui sopra fa, funziona. Ma se uso sopra il codice commentato sopra, che è davvero la creazione più semplice di un codice Storyboard
immaginabile, non succede nulla. L'animazione viene eseguita - almeno, l'evento Completato viene sollevato - ma nulla cambia sullo schermo.
Chiaramente sto facendo qualcosa di sbagliato, ma non riesco a vedere cosa sia. Ogni esempio di creazione di storyboard nel codice che ho visto sembra proprio questo. C'è ovviamente qualcosa riguardo le animazioni e gli storyboard che ancora non conosco: cos'è?
FYI - Ho postato questo come un bug su Microsoft Connect. https://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception –