2014-11-19 7 views
0

나는 WPF 및 애니메이션을 배우려고 노력하고 있습니다. 나는 사용자가 마우스를 사용하여 타원을 움직일 수있는 간단한 프로그램을 가지고있다. 마우스 버튼을 놓으면 타원의 위치가 화면 상단으로 움직입니다.초보자 WPF : 애니메이션이 연결된 속성을 제거합니까?

이 잘 나는 타원을 잡고 처음으로 작동합니다. 그러나 두 번째로 나는 타원을 잡아서 더 이상 y- 위치를 변경할 수 없습니다 (그러나 x- 위치는 여전히 변경할 수 있습니다). 애니메이션이 어떻게 든 연결 Canvas.Top속성을 제거합니까? 어떻게하면이 문제를 해결할 수 있습니까?

여기 (지도 모르기 때문에 mouseUp 핸들러에 위치) 애니메이션을 시작하는 코드

Duration duration = new Duration(TimeSpan.FromSeconds(5.0*oldY/1000)); 

DoubleAnimation anim = new DoubleAnimation(oldY, 0, duration); // move to top of canvas 

_shapeSelected.BeginAnimation(Canvas.TopProperty, anim); 

이며, 여기에 마우스 이동 처리기

private void Canvas_MouseMove_1(object sender, MouseEventArgs e) 
    { 

     if (_shapeSelected != null) 
     { 
      Point pt = e.GetPosition(theCanvas); 

      Canvas.SetLeft(_shapeSelected, (pt.X-_posOfMouseOnHit.X) + _posOfShapeOnHit.X); 
      Canvas.SetTop(_shapeSelected, (pt.Y-_posOfMouseOnHit.Y) + _posOfShapeOnHit.Y); 

     } 

    } 

답변

1

애니메이션의 FillBehaviorStop으로 설정하십시오. 속성이 현재로 되돌아으로는 애니메이션이 완료되면 애니메이션이 시작된 후, 당신은 또한 로컬 값을 설정해야 local value 현재. 좋아

var anim = new DoubleAnimation(oldY, 0, duration, FillBehavior.Stop); 

_shapeSelected.BeginAnimation(Canvas.TopProperty, anim); 
Canvas.SetTop(_shapeSelected, 0); 
+0

BeginAnimation에 세 번째 인수가 HandoffBehavior 아닌 FilllBehavior 인을 제거하려고합니다. – ragnarius

+0

제 대답에는 BeginAnimation에 대한 세 번째 인수가 없습니다. 대신 DoubleAnimation 생성자에 대한 또 다른 인수입니다. 'FillBehavior.Stop'은 여러분이 여기서 필요한 것입니다. – Clemens

+0

감사합니다. 처음에는 솔루션을 읽지 않았습니다. 이제 작동합니다! – ragnarius

1

당신은 MSDN에 here에서 볼 수 있듯이이다, 애니메이션에 의해 설정된 값 (랭크 2)은 로컬 값 (랭크 3)보다 더 높은 우선 순위를 갖는다. 수동으로 값을 다시 설정하려면 이전에 애니메이션을 중지하거나 제거해야합니다. (이 사이트의 '강압, 애니메이션 및 기본 값'섹션 참조)

+0

, 감사합니다. 그래서 애니메이션 ... – ragnarius

관련 문제