【问题标题】:implementing zoom on an image wp7在图像 wp7 上实现缩放
【发布时间】:2012-04-25 17:55:24
【问题描述】:

我正在尝试在我的 wp7 应用程序中使用像其他应用程序功能(即地图)一样的点按或捏合来启用图像的缩放功能。我看到的大多数与此相关的帖子都已经过时了,我想知道是否有更新的方法来实现这一点??

【问题讨论】:

    标签: silverlight image windows-phone-7 zooming deepzoom


    【解决方案1】:

    不知道有没有更好的办法,但这是我正在做的:

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

    如果您想快速双击或重置大小,您还可以跟踪原始比例。

    【讨论】:

    • 谢谢,非常适合缩放...缩放后是否可以平移图像?
    • 本来打算添加 DragDelta 事件,但我看到有人抢先一步。当然,将其用于平移,并且不要忘记将其添加到 xaml 中的 GestureListener。
    【解决方案2】:

    您需要使用缩放变换。如果您有兴趣,我可以稍后再写一篇博文。对于捏缩放拖动轻弹等,您需要使用工具包中的手势服务

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

    【讨论】:

    • 这是否允许用户缩放然后在缩放后的图像上移动?
    • 是的,我已经实现了捏缩放、拖动、轻弹等。这里是平移/拖动的代码
    • 好的,我只需在我的 xaml 中添加类似 DragDelta="OnDragDelta" 的内容?
    • 是在 GestureListener xaml 声明中,添加 DrageDelta="method"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2017-06-17
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多