2010-11-22 3 views
0

캔버스에있는 이미지의 왼쪽 속성에 애니메이션을 적용하려고합니다.Animate Canvas.Left 속성

것은 내가하고 있어요 경우 :

image.SetValue(Canvas.LeftProperty, destX[i]); 

이 노력하고 있습니다. 그러나 나는 일을 해요 때

Animate(image, lastValue, destX[i], 500); 

private void Animate(Image image, double val1, double val2, double miliseconds) 
    { 
     DoubleAnimation myDoubleAnimation = new DoubleAnimation { From = val1, To = val2, Duration = new Duration(TimeSpan.FromMilliseconds(miliseconds)) }; 

     TranslateTransform ts = new TranslateTransform(); 
     image.RenderTransform = ts; 
     Storyboard.SetTarget(myDoubleAnimation, ts); 

     Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(TranslateTransform.XProperty)); 
     Storyboard myMovementStoryboard = new Storyboard(); 
     myMovementStoryboard.Children.Add(myDoubleAnimation); 
     myMovementStoryboard.Begin(); 
     myMovementStoryboard.Completed += (s, e) => 
      { 
       image.SetValue(Canvas.LeftProperty, val2); 
      }; 
    } 

내 애니메이션 기능에서 잘못 될 수있는 것

을 작동하지 않습니다

로? 애니메이션을 잘못 수행 할 수있는 경우에도 완료된 이벤트는 좋은 값을 canvas.leftproperty로 다시 설정해야합니다.

하지만 내 경우에는 문제가 발생합니다.

어떻게 애니메이션 기능을 수행 했습니까? 어떤 도움

답변

0

당신은 Canvas.LeftProperty을 설정하는,하지만 당신은 TranslateTransform.XProperty 애니메이션을하고 사전에

감사합니다. 변환 전달이 이후에 적용되면 이 적용되므로 매우 다른 속성입니다. 따라서 Canvas.Left를 사용하여 캔버스에 객체를 배치했지만 TranslateTransform을 사용하면 원래의 원점에서 벗어나 이동합니다. 당신이해야 할 일은 val2로 TranslateTransform.XProperty를 다시 설정하는 것입니다.

myMovementStoryboard.Completed += (s, e) => 
      { 
       ts.X = val2; 
      }; 

즉, 애니메이션이 실제로 중간에 실패해서는 안되기 때문에이 여분의 안전 장치가 필요하지 않아야합니다.

+0

사실 저는 canvas.left 속성을 사용하고 싶습니다. Storyboard.SetTargetProperty (myDoubleAnimation, 새 PropertyPath (Canvas.LeftProperty))를 사용하면 안됩니다. ? TranslateTransform.XProperty를 사용하는 대신? (물론 시도한 후에 인수 예외가 있습니다.) – Tim

+0

Canvas.LeftProperty를 애니메이션 할 수 있어야합니다. 이 경우 작동하지 않는 이유를 이해하기 위해 코드가 어떻게 보이는지 확인해야합니다. 목표는이 경우 '이미지'입니다. –

6

나는 이렇게 했어. 괜찮 았어.

DoubleAnimation myDoubleAnimation = new DoubleAnimation { From = val1, To = val2, Duration = new Duration(TimeSpan.FromMilliseconds(miliseconds)) }; 

    //set the target of the animation 
    Storyboard.SetTarget(myDoubleAnimation, Image); 
    //set the target property of the animation. Don't forget the () around canvas.left 
    Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath("(Canvas.Left)")); 
    //create the storyboard 
    Storyboard myMovementStoryboard = new Storyboard(); 
    //add the animation to the storyboard 
    myMovementStoryboard.Children.Add(myDoubleAnimation); 
    //begin animation 
    myMovementStoryboard.Begin(); 
+0

나를 위해 Storyboard.SetTargetProperty (myDoubleAnimation, 새 PropertyPath ("(Canvas.Left)")); 일하지 않았다. 대신 Storyboard.SetTargetProperty (myDoubleAnimation, "(Canvas.Left)")를 사용했습니다. 괜찮은 것 같습니다. 다른 사람에게도 도움이되기를 바랍니다. – SmartDev