简体   繁体   English

在图像wp7上实现缩放

[英]implementing zoom on an image wp7

I am trying to enable zoom capabilities on an image in my wp7 app using either tap or pinch like other app features,ie,map. 我正在尝试使用wp7或其他应用程序功能(例如,地图)来点按wp7应用程序中的图像以启用缩放功能。 Most of the posts i've seen relating to this are a it old and am wondering if there is a more recent way to achieve this?? 我见过的与此相关的大多数帖子都已经过时了,我想知道是否有一种更新的方法可以实现这一目标?

don't know if there is something better, but here is what I'm doing: 不知道是否有更好的东西,但是这是我在做什么:

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

You can also keep track of the original scale if you want to do a quick double-tap or something to reset the size. 如果您想快速双击或重置大小,也可以跟踪原始比例。

You need to use scale transform.. I can do a blogpost later on if you are interested.for pinch zoom drag flick etc you need to use gesture service from 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;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM