2011-07-30 4 views
2

TranslateTransform 클래스를 사용하여 Y 축의 Grid에서 이미지를 이동하려고합니다. 내가 SetMargin 또는 SetCanvas를 사용할 수 없도록 부드럽게하려면이 이동이 필요합니다. 나는 코드 뒤에서 이것을 시도한다 :WPF TranslateTransform

사용하고자하는 객체 (Image 컨트롤)는 Grid에 배치된다. 처음에는 모든 것이 정상적으로 작동합니다. 동일한 기능을 사용하여 개체를 다시 이동하려고하면 문제가 발생합니다. 개체 (이미지 컨트롤)가 처음 시작 위치 (초기 Y 좌표)로 이동 한 다음 애니메이션이 시작됩니다.

TranslateTransform이 좌표 (내 경우 Margin 속성)를 변경하지 않는다고합니까?

감사합니다.

답변

1

변형은 원래 값을 변경하지 않습니다. 이들은 원래의 원점입니다. 움직일 때마다 새로운 원점을 원한다면 애니메이션 완료 이벤트를 처리 할 수 ​​있습니다. 또는 변형을 통해 현재 오프셋을 가져 와서 애니메이션의 새로운 시작점으로 만들 수 있습니다.

즉 당신의 시작 값은 항상 TranslateTransform이 변환을 렌더링의 특정 종류의 값

0

에 마지막으로 이동 될 것입니다. 컨트롤 (예 : Margin 속성)의 속성을 변경하는 대신 컨트롤이 화면에 표시되는 방식에 영향을줍니다.

0

당신은 명시 적으로 애니메이션이 0부터 시작하도록했습니다. 당신이 말한대로하고 있습니다. 명시적인 0 인 fromvalue을 삭제하면 모든 것이 작동합니다.

var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)) 
       { EasingFunction = new SineEase() }; 
0

DoubleAnimation의 By 속성을 사용해야합니다. 시도해보기 :

//everytime you execute this anmation your object will be moved 2.0 further 
double offset = 2.0 
var anim2 = new DoubleAnimation(newY, TimeSpan.FromSeconds(2)); 
anim2.To = null; 
anim2.By = offset;