2

我试图在我的 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();
    }

但是,当我放大并更改图像时,ScrollView 控件在图像的底部和右侧有空白区域。几乎就像在缩放变换之前使用原始图像的大小对图像进行了缩放但裁剪一样。

任何想法我做错了什么?

我还创建了一个重现此问题的项目:http: //dl.dropbox.com/u/2598447/ZoomTest.WP7.zip

4

1 回答 1

1

我终于从 Microsoft 的 David Anson 那里得到了一些答案,并希望能提供解决方案。这是他的评论,但您也可以在他的博客上阅读他的回答:

你的手机可以变成机器人 - LayoutTransformer 在 Windows Phone 平台上运行良好

感谢您的精彩演示!这个问题原来是由于 Windows Phone 7 上 Silverlight 的限制 - 大于 2048x2048 的 UI 元素在显示时会被裁剪为该大小。这是有关该问题的更多信息的链接:

stackoverflow.com/.../bitmapimage-size-restrictions-in-silverlight

在您的示例中,测试图像为 1201x1401,我首先注意到在 3 个“放大”之后出现剪辑 - 这对应于 1.9 倍的缩放因子 - 转换为 2282x2662 的有效图像尺寸 - 这超出了两个方向的限制。进行数学计算以计算超过 2048 的数量,水平方向为 234,垂直方向为 614。现在记住这些数字,并一直滚动到手机 480x800 屏幕上 ScrollViewer 的右下角。请注意,水平黑色空间的数量大约是屏幕宽度的一半(即~240px),垂直黑色空间大约是屏幕高度的四分之三(即600px)——因为这些估计值与我们的超量非常接近“刚刚计算过,我对你很有信心”这个问题。

不幸的是,这是一个平台限制(您已经通过在桌面 Silverlight 上成功运行您的方案确认了这一点),因此我无法在 LayoutTransformer 中直接修复。幸运的是,上面的线程/链接中讨论了一些解决方法。

很抱歉给您带来麻烦 - 我希望这会有所帮助!

答案中还引用了一篇 stackoverflow 文章,将这个问题的根本原因描述为 Windows Phone 7 平台限制:

Silverlight 中的位图图像大小限制

于 2011-01-12T07:56:19.043 回答