我正在尝试在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平台限制:

Silverlight中的位图尺寸限制

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top