2012-04-25 3 views
2

Я пытаюсь включить возможности масштабирования изображения в моем приложении wp7, используя либо кран, либо щепотку, как и другие функции приложения, т. Е. Карту. Большинство сообщений, которые я видел в связи с этим, являются старыми, и мне интересно, есть ли более свежий способ достичь этого?реализация масштабирования изображения wp7

ответ

3

Вы должны использовать масштаб преобразования .. Я могу сделать BlogPost позже, если вы interested.for пинч масштабирования дрэг взмахом и т.д. Вы должны использовать жест услуг от инструментария

private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e) 
    { 
     scaleTrans.CenterX = (scaleTrans.CenterX - e.HorizontalChange); 
     scaleTrans.CenterY = (scaleTrans.CenterY - e.VerticalChange); 

     if (scaleTrans.CenterX < 0) 
      scaleTrans.CenterX = 0; 
     else if (scaleTrans.CenterX > (imgViewer.Height * scaleTrans.ScaleX)) 
      scaleTrans.CenterX = imgViewer.Height * scaleTrans.ScaleX; 

     if(scaleTrans.CenterY < 0) 
      scaleTrans.CenterY = 0; 
     else if (scaleTrans.CenterY > (imgViewer.Height * scaleTrans.ScaleY)) 
      scaleTrans.CenterY = imgViewer.Height * scaleTrans.ScaleY; 
    } 
+1

Это позволяет пользователю масштабировать, а затем перемещаться по увеличенному изображению? – mhSligo

+1

да, я реализовал щепотку зума, перетаскивания, щелчка и т. Д. Вот код для панорамирования/перетаскивания –

+0

Хорошо, и я просто добавляю что-то вроде 'DragDelta =" OnDragDelta "' в моем xaml? – mhSligo

4

не знаю, есть что-то лучше, но вот то, что я делаю:

<Image Name="displayImage" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Source="{Binding photo_link}" RenderTransformOrigin="0.5, 0.5" CacheMode="BitmapCache"> 
     <Image.RenderTransform> 
      <CompositeTransform x:Name="transform" /> 
     </Image.RenderTransform> 
     <toolkit:GestureService.GestureListener> 
      <toolkit:GestureListener PinchDelta="OnPinchDelta" PinchStarted="OnPinchStarted" /> 
     </toolkit:GestureService.GestureListener> 
</Image> 



    private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e) 
    { 
     var image = sender as System.Windows.Controls.Image; 
     if (image == null) return; 
     var transform = image.RenderTransform as CompositeTransform; 
     if (transform == null) return; 
     initialScale = transform.ScaleX; 
    } 

    private void OnPinchDelta(object sender, PinchGestureEventArgs e) 
    { 
     var image = sender as System.Windows.Controls.Image; 
     if (image == null) return; 
     var transform = image.RenderTransform as CompositeTransform; 
     if (transform == null) return; 

     transform.ScaleX = initialScale * e.DistanceRatio; 
     transform.ScaleY = initialScale * e.DistanceRatio; 
    } 

вы также можете следить за оригинальную шкалу, если вы хотите сделать быстрый двойной кран или что-то, чтобы сбросить размер.

+1

спасибо, идеально подходит для масштабирования ... Есть ли возможность панорамирования изображения после масштабирования? – mhSligo

+0

собирался добавить событие DragDelta, но я вижу, что кто-то избил меня. Разумеется, используйте это для панорамирования и не забудьте добавить его в свой GestureListener в xaml. – earthling

Смежные вопросы