使用layouttransformer和scrollviewer在Windows Phone 7上使用ScalEtransform时缺少图像的一部分
-
14-10-2019 - |
题
我正在尝试在Windows Phone 7应用程序中的ScrollViewer中使用缩放图像。在应用程序页面上,我定义这样的控件:
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Name="ImageScroller" HorizontalAlignment="Center" VerticalAlignment="Center">
<layout:LayoutTransformer x:Name="LayoutTransformer">
<layout:LayoutTransformer.LayoutTransform>
<ScaleTransform x:Name="ImageScale"/>
</layout:LayoutTransformer.LayoutTransform>
<Image x:Name="Image" Margin="4" Source="{Binding ImageSource}" />
</layout:LayoutTransformer>
</ScrollViewer>
LayoutTransFormer类来自Silverlight扩展项目。
我有处理Zoomin和Zoomout事件的方法,并且在此处进行以下操作:
private void ApplicationBarIconButton_Click_1(object sender, EventArgs e)
{
// Zoom In
ImageScale.ScaleX = ImageScale.ScaleY = ImageScale.ScaleX + 0.5;
LayoutTransformer.ApplyLayoutTransform();
ImageScroller.InvalidateMeasure();
}
但是,当我有一个缩放并更改图像时,滚动视图控件在图像的底部和右侧都有空区域。几乎好像将图像缩放了,但在刻度转换之前使用原始图像的大小剪裁。
有什么想法我做错了什么?
我还创建了一个重现此问题的项目: http://dl.dropbox.com/u/2598447/zoomtest.wp7.zip
解决方案
我终于收到了一些答案,并希望从微软的戴维·安森(David Anson)提供解决方案。这是他的评论,但您也可以在他的博客上阅读他的答案:
您的手机可以变成机器人 - LayoutTransFormer在Windows Phone Platform上效果很好
感谢您的示范!事实证明,此问题是由于Windows Phone 7上的Silverlight限制 - 大于2048x2048的UI元素在显示时被剪裁到该尺寸。这是指向有关该问题的更多信息的链接:
stackoverflow.com/.../bitmapimage-size-restrictions in-silverlight
在您的示例中,测试图像为1201x1401,我首先注意到在“缩放” s的3“缩放之后剪辑),该缩放率对应于1.9倍的变焦系数 - 转化为有效的图像大小为2282x2662-超过了两个方向的限制。进行数学计算以超过2048的数量的水平方向234,垂直方向为614。现在,请记住这些数字,并一直滚动到手机的480x800屏幕上的ScrollViewer的右下角。请注意,水平黑空间的数量约为屏幕宽度(即〜240px)的一半,垂直黑色空间约为屏幕高度的四分之三(即600px) - 因为这些估计值与我们的过度匹配非常紧密,我们'刚计算出来,我非常有信心您遇到了 这个 问题。
不幸的是,这是一个平台限制(您已经通过在桌面Silverlight上成功运行场景来确认它),因此我无法直接在LayoutTransFormer中修复。幸运的是,上面的线程/链接中有一些解决方法。
抱歉,麻烦 - 希望这会有所帮助!
另外,在答案中也引用了一篇Stackoverflow文章,该文章描述了此问题的根本原因是Windows Phone 7平台限制: