реализация масштабирования изображения wp7
Я пытаюсь включить возможности масштабирования изображения в моем приложении wp7, используя либо нажатие, либо сжатие, как и другие функции приложения,т. е. карту. Большинство сообщений, которые я видел, относятся к этому, являются ИТ-старыми, и мне интересно, есть ли более свежий способ достичь этого??
2 ответа:
Вам нужно использовать масштабное преобразование.. Я могу сделать запись в блоге позже, если вам интересно.для pinch zoom drag flick и т. д. Вам нужно использовать сервис жестов из toolkit
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; }
Не знаю, есть ли что-то лучше, но вот что я делаю:
<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; }
Вы также можете отслеживать исходный масштаб, если хотите сделать быстрое двойное нажатие или что-то, чтобы сбросить размер.