2010-09-21 21 views
0

Je souhaite animer la position rectangle x de mon code (la position x étant seulement déterminée au moment de l'exécution).Dans WPF, comment animer la propriété X de l'UIEllement à partir du code derrière?

J'ai obtenu le code suivant:

KeySpline easeOut = new KeySpline(0, 1, 0.3, 1); 
Storyboard sb = new Storyboard(); 
DoubleAnimationUsingKeyFrames da1 = new DoubleAnimationUsingKeyFrames(); 

SplineDoubleKeyFrame keyFrame1 = new SplineDoubleKeyFrame(); 

GeneralTransform generalTransform = rect4.TransformToVisual(this); 
Point point = generalTransform.Transform(new Point()); 

keyFrame1.Value = point.X; 

keyFrame1.KeySpline = easeOut; 

da1.KeyFrames.Add(keyFrame1); 

sb.Children.Add(da1); 

Storyboard.SetTarget(da1, rect); 
Storyboard.SetTargetProperty(da1, new PropertyPath("What is the path?")); 


sb.Begin(); 

La chose que je ne sais pas est ce qu'il faut mettre pour la PropertyPath ?!

Répondre

1

Si vous avez placé sur la toile utilisez ce

Storyboard.SetTargetProperty(da1, new PropertyPath("(Canvas.Left)")); 

Je placerait le code dans le XAML Window.Resorces, lui donner un nom x: Name = « DA1 » et dix appeler tout simplement dans le code

sb.Begin(); 
+0

Mais ce n'est pas à l'intérieur de la toile. Comme je l'ai déjà mentionné, je ne détermine que la position X pendant l'exécution de l'application, je pourrais changer la valeur keyFrame pendant l'exécution, mais avec cette approche, le code serait éparpillé autour de mon application, ce que je ne veux pas. – Vitalij

+0

Comment déterminez-vous cela? Si vous placez un objet dans Grid, StackPanel etc, il n'aura pas de coordonnées. Pour silverlight j'utilise (UIElement.RenderTransform). (CompositeTransform.TranslateX) que je crois que vous devez changer en TranslateTransform (aussi il doit être alocated "new TranslateTransform"). Il utilise des valeurs relatives. –