2010-01-07 4 views
1

Эксперты Silverlight, мне нужна помощь. Я использовал Deep Zoom Composer для создания приложения Silverlight для большого изображения карты (20 МБ +) для клиента. Но клиент не хочет, чтобы люди качались на черные области, которые находятся вне границ изображения в MultiScaleImage. Как я могу это сделать? Спасибо!Ограничить панорамирование только до области видимого изображения в Silverlight MultiScaleImage

ответ

0

Я нашел немного грязного исправления для этого. Когда событие ViewPortChanged срабатывает, я передаю вновь измененный ViewportOrigin из MultiScaleImage методу ниже. Проблема заключается в том, что пользовательский порт View изменен асинхронно, и пользователь может увидеть, как изображение возвращается к его границам.

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; 
    } 
Смежные вопросы