1

Silverlight のエキスパートです。助けが必要です。Deep Zoom Composer を使用して、クライアント用の大きなマップ イメージ (20MB 以上) 用の Silverlight アプリケーションを生成しました。しかし、クライアントは、MultiScaleImage の画像の境界外にある黒い領域に人々がパンすることを望んでいません。どうやってやるの?ありがとう!

4

1 に答える 1

0

私はこれに対する少し汚い修正を見つけました。ViewPortChangedイベントが発生すると、新しく変更されたMultiScaleImageのViewportOriginを以下のメソッドに渡します。問題は、ビューポートが非同期に変更され、ユーザーが実際に画像が境界に戻されているのを確認できることです。

public void SetViewportOrigin(Point point)
    {
        Point bottomRight = ZoomImage.ElementToLogicalPoint(new Point(ZoomImage.ActualWidth / ZoomImage.ViewportWidth - ZoomImage.ActualWidth, ZoomImage.ActualWidth / (ZoomImage.ViewportWidth * 1.33184438 /*ZoomImage.AspectRatio*/) - ZoomImage.ActualHeight));
        bottomRight.X -= ZoomImage.ViewportOrigin.X;
        bottomRight.Y -= ZoomImage.ViewportOrigin.Y;

        if (point.X < 0)
        { //left edge
            point.X = 0;
            Debug.WriteLine("left edge");
        }
        else if (point.X > bottomRight.X)
        {//right edge
            point.X = bottomRight.X;
            Debug.WriteLine("right edge");
        }

        if (point.Y > 1.0)
        {//bottom edge

            point.Y = 1.0;
            Debug.WriteLine("bottom edge1");
        }

        if (point.Y < 0)
        {//top edge
            point.Y = 0;
            Debug.WriteLine("top edge");
        }
        else if (point.Y > bottomRight.Y) //bottom edge
        {
            point.Y = bottomRight.Y;
        }

        ZoomImage.ViewportOrigin = point;
    }
于 2010-03-30T19:37:46.217 に答える