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.9xのズーム倍率に対応します.2282x2662の有効な画像サイズに変換されます. これが 2048 を超える量を計算するために計算を行うと、水平方向に 234、垂直方向に 614 が得られます。これらの数字を念頭に置いて、携帯電話の 480x800 画面の ScrollViewer の右下までスクロールします。水平方向の黒いスペースの量は画面幅の約半分 (つまり ~240px) であり、垂直方向の黒いスペースは画面の高さの約 4 分の 3 (つまり 600px) であることに注意してください。 「計算したところです。かなり自信があります」この問題。

残念ながら、これはプラットフォームの制限 (デスクトップ Silverlight でシナリオを正常に実行することで既に確認済み) であるため、LayoutTransformer で直接修正できるものではありません。幸いなことに、上記のスレッド/リンクで説明されている回避策がいくつかあります。

お手数をおかけして申し訳ありません - これがお役に立てば幸いです。

また、この問題の根本原因を Windows Phone 7 プラットフォームの制限として説明している回答で参照されている stackoverflow の記事もあります。

Silverlight での BitmapImage のサイズ制限

于 2011-01-12T07:56:19.043 に答える