簡體   English   中英

在圖像wp7上實現縮放

[英]implementing zoom on an image wp7

我正在嘗試使用wp7或其他應用程序功能(例如,地圖)來點按wp7應用程序中的圖像以啟用縮放功能。 我見過的與此相關的大多數帖子都已經過時了,我想知道是否有一種更新的方法可以實現這一目標?

不知道是否有更好的東西,但是這是我在做什么:

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

如果您想快速雙擊或重置大小,也可以跟蹤原始比例。

您需要使用比例變換。.如果您有興趣,我可以在以后做一個博客。對於捏縮放,拖動輕彈等,您需要使用工具包中的手勢服務

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