2014-06-13 4 views
0

터치 제스처를 사용하여 캔버스 요소 내에서 사각형을 이동하고 크기 조절합니다. 코드는 이러한 기준에 기초한다 : 드래그Windows Phone XAML : 집어 넣기 동작 후 변형 행렬 적용

<Canvas Name="canvas" > 
    <Rectangle x:Name="rectangle" Fill="Green" Height="300" Canvas.Left="0" Stroke="Red" Canvas.Top="0" Width="100" StrokeThickness="3" > 
     <Rectangle.RenderTransform> 
      <TransformGroup> 
       <MatrixTransform x:Name="previousTransform" /> 

       <TransformGroup x:Name="currentTransform"> 
        <ScaleTransform x:Name="scaleTransform" /> 
        <TranslateTransform x:Name="translateTransform" /> 
       </TransformGroup> 
      </TransformGroup> 
     </Rectangle.RenderTransform> 

     <toolkit:GestureService.GestureListener> 
      <toolkit:GestureListener DragStarted="OnGestureListenerDragStarted" 
          DragDelta="OnGestureListenerDragDelta" 
          DragCompleted="OnGestureListenerDragCompleted" 
          PinchStarted="OnGestureListenerPinchStarted" 
          PinchDelta="OnGestureListenerPinchDelta" 
          PinchCompleted="OnGestureListenerPinchCompleted" /> 
     </toolkit:GestureService.GestureListener> 
    </Rectangle> 
</Canvas> 

:

void OnGestureListenerDragDelta(object sender, DragDeltaGestureEventArgs args) 
{ 
    translateTransform.X += args.HorizontalChange; 
    translateTransform.Y += args.VerticalChange; 
} 

규모가 업데이트 변환 핀칭 중 : http://msdn.microsoft.com/en-us/magazine/gg650664.aspx

XAML 코드는 다음과 같다

void OnGestureListenerPinchDelta(object sender, PinchGestureEventArgs args) 
{ 
    scaleTransform.ScaleX = args.DistanceRatio; 
    scaleTransform.ScaleY = args.DistanceRatio; 
} 

꼬집기가 끝나면 나는 "진짜"크기와 직사각형의 위치를 ​​얻고 싶다. 부모 캔버스 안에 때 규모를 증가 이것은 번역 잘 작동하지만 스케일링은 사각형의 크기를 조절할 (잘못이지만 요인이 너무 큰

void OnGestureListenerPinchCompleted(object sender, PinchGestureEventArgs args) 
{ 
    Rect r = currentTransform.TransformBounds(new Rect(Canvas.GetLeft(rectangle), Canvas.GetTop(rectangle), rectangle.Width, rectangle.Height)); 
    rectangle.Width = r.Width; 
    rectangle.Height = r.Height; 
    Canvas.SetLeft(rectangle, r.X); 
    Canvas.SetTop(rectangle, r.Y); 

    // Reset transforms 
    previousTransform.Matrix = new Matrix(); 
    rectangle.RenderTransformOrigin = new Point(0, 0); 

    scaleTransform.ScaleX = scaleTransform.ScaleY = 1; 
    scaleTransform.CenterX = scaleTransform.CenterY = 0; 

    translateTransform.X = translateTransform.Y = 0; 
} 

, 너무 작은 감소 때 : 따라서 나는 사각형 경계에 변환을 적용하려 규모). 크기가 조절 된 사각형의 정확한 최종 크기를 얻으려면 어떻게해야합니까?

안부

답변

0

는 I 수동 변환 행렬 클래스 ommitting과 스케일링 계수를 사용하여 변환 값에 의해 문제를 해결.

그럼에도 불구하고 위의 XAML 코드를 사용하는 솔루션에 관심이 있습니다.