J'ai créé une sous-classe simple de StackPanel
que je peux déplacer à l'écran en utilisant une animation TranslateTransform
. Il ressemble à ceci:Pourquoi ces animations ne fonctionnent-elles pas lorsque j'utilise un 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.");
}
}
Et voici mon problème: Si je les propriétés X anime et Y directement, comme le code ci-dessus ne, cela fonctionne. Mais si j'utilise le code commenté ci-dessus, ce qui est vraiment la création la plus simple d'un Storyboard
dans le code imaginable, rien ne se passe. L'animation tourne - au moins, l'événement Completed est levé - mais rien ne change à l'écran. De toute évidence, je fais quelque chose de mal, mais je ne peux pas voir ce que c'est. Chaque exemple de création de storyboards dans le code que j'ai vu ressemble à ceci. Il y a évidemment quelque chose à propos des animations et des story-boards que je ne connais pas encore: qu'est-ce que c'est?
FYI - J'ai signalé cela comme un bug sur Microsoft Connect. https://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception –