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

我添加了GestureListener到一个图像我试图像这样的Stack Overflow回答这里: 如何放大和缩小WP7中的图像?

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

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

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

有办法解决这个问题吗? GestureListener不会修改Image对象的宽度/高度,所以我不能简单地做

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

这篇博客文章展示了如何在图像上实现捏合/缩放比例: http : //alvaropeon.wordpress.com/2011/03/10/implementing-pinch-to-zoom-images-in-wp7/这里提供的解决方案是限制原始大小的4倍,但你可以随意。 如果要将其约束为父级,则只需将父级的ActualWidthActualHeight用作限制即可。

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

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

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

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

我想你可以通过在下面的事件处理程序中限制transform.ScaleXtransform.ScaleY来实现它。如果initialScale

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