仅限平移到Silverlight MultiScaleImage中的可见图像区域

时间:2010-01-07 19:04:50

标签: wpf silverlight silverlight-3.0 multiscaleimage

Silverlight专家在那里,我需要一些帮助。 我使用Deep Zoom Composer为客户端生成大型地图图像(20MB +)的Silverlight应用程序。 但客户端不希望人们平移到MultiScaleImage中超出图像范围的黑色区域。 我怎样才能做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:0)

我发现这个问题很难解决。触发ViewPortChanged事件时,我将MultiScaleImage的新更改的ViewportOrigin传递给下面的方法。问题是,View Port是异步更改的,用户实际上可以看到图像被移回其边界。

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;
    }