реализация масштабирования изображения wp7


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

2 2

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;
    }

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