WP7 GestureListener上图像宽度/高度的约束

时间:2011-03-31 23:04:48

标签: c# xaml windows-phone-7

我将GestureListener添加到图片中,我试图像这样的Stack Overflow回答一样放大:How to zoom in and zoom out Images in WP7?

问题是图像永远不会停止缩放,并且会覆盖页面上的其他控件。这包括页面上的一些重要按钮。

此外,它允许图像变得如此之小以至于很难使图像变得更大,并且允许图像离屏幕太远而太难以将图像带回来。

我的目标是: 将图像保留在分配给它的网格行中,不包括其他控件。 防止图像的宽度/高度变小 防止变得太大的宽度/高度 防止图像被拖出屏幕。

有没有办法解决这个问题? Image对象的宽度/高度未被GestureListener修改,因此我不能简单地执行

Image i = sender as Image;
if (i.Height == TOO_BIG)
return;
...

3 个答案:

答案 0 :(得分:2)

此博客文章介绍了如何在图像上实现捏合/缩放缩放:http://alvaropeon.wordpress.com/2011/03/10/implementing-pinch-to-zoom-images-in-wp7/此处提供的解决方案是将原始大小限制为4倍,但您可以随意使用。如果您想将其约束为父级,那么只需将父级的 ActualWidth ActualHeight 用作限制。

答案 1 :(得分:2)

我最终解决了这个问题并使其与以下博客中的代码完美配合:

http://www.frenk.com/2011/03/windows-phone-7-correct-pinch-zoom-in-silverlight/

这是一组令人印象深刻的Pinch / Zoom功能。关于覆盖其他控件的图像的问题是通过向网格添加剪辑来修复的,详细信息如下:

http://www.codeproject.com/Articles/36495/Silverlight-ClipToBounds-Can-I-Clip-It-Yes-You-Can.aspx

答案 2 :(得分:1)

我想你可以通过在下面的事件处理程序中限制transform.ScaleXtransform.ScaleY来实现。initialScale< somelength,然后只做代码。

private void OnPinchDelta(object sender, PinchGestureEventArgs e)
    {
        transform.Rotation = initialAngle + e.TotalAngleDelta;
        transform.ScaleX = initialScale * e.DistanceRatio;
        transform.ScaleY = initialScale * e.DistanceRatio;
    }