2009-12-27 3 views
0

WPF 변환 혼란

  this.source = VisualTreeHelper.GetChild(this, 0) as FrameworkElement; 
     this.zoomTransform = new ScaleTransform(); 
     this.transformGroup = new TransformGroup(); 
     this.transformGroup.Children.Add(this.zoomTransform); 
     this.transformGroup.Children.Add(this.translateTransform); 
     this.source.RenderTransform = this.transformGroup; 

다음 캔버스를 특정 지점 (원래 좌표)으로 화면 중심으로 이동하는 방법이

인 캔버스가 있습니다.
 public void MoveTo(Point p) 
    { 
     var parent= VisualTreeHelper.GetParent(this) as FrameworkElement; 
     Point centerPoint = new Point(parent.ActualWidth/2, parent.ActualHeight/2); 

     double x = centerPoint.X - p.X; 
     double y = centerPoint.Y - p.Y; 

     x *= this.zoomTransform.ScaleX; 
     y *= this.zoomTransform.ScaleY; 

     this.translateTransform.BeginAnimation(TranslateTransform.XProperty, CreatePanAnimation(x), HandoffBehavior.Compose); 
     this.translateTransform.BeginAnimation(TranslateTransform.YProperty, CreatePanAnimation(y), HandoffBehavior.Compose); 
    } 

private DoubleAnimation CreatePanAnimation(double toValue) 
    { 
     var da = new DoubleAnimation(toValue, new Duration(TimeSpan.FromMilliseconds(300))); 
     da.AccelerationRatio = 0.1; 
     da.DecelerationRatio = 0.9; 
     da.FillBehavior = FillBehavior.HoldEnd; 
     da.Freeze(); 
     return da; 
    } 

실제로 팬 애니메이션이 부정확 한 줌 애니메이션이 실제로 활성화 될 때까지 모든 것이 잘 작동합니다. 나는 x, y 및 중심점 계산 방법을 다르게 시도했지만 올바른 결과를 얻을 수는 없습니다. 모든 도움을 주셔서 감사합니다, 간단하게해야 :) # : 345486

나는 또한 확대/축소 및 팬 지점에 약간의 불확실성을

달성하는 방법을 만들고 싶습니다.

답변

0

신경 끄시 고, 난 것을 달성하는 것

Point centerPoint = new Point(parent.ActualWidth/2/this.zoomTransform.ScaleX, parent.ActualHeight/2/this.zoomTransform.ScaleY); 

바보 같은 나는 규모와 팬 값을 늘 동기화 할 수 있기 때문에 내가

this.translateTransform.BeginAnimation(TranslateTransform.XProperty, CreatePanAnimation(x), HandoffBehavior.Compose); 
this.translateTransform.BeginAnimation(TranslateTransform.YProperty, CreatePanAnimation(y), HandoffBehavior.Compose); 

this.zoomTransform.BeginAnimation(ScaleTransform.ScaleXProperty, CreateZoomAnimation(factor)); 
this.zoomTransform.BeginAnimation(ScaleTransform.ScaleYProperty, CreateZoomAnimation(factor)); 

실 거예요 작업이지만 규모 및 확대 애니메이션을 결합 할 수있는 방법에 여전히 관심이 .. .