2012-01-03 31 views
2

我有一個兵地圖這個片段:剪輯後的Bing地圖不會在ScrollViewer中刷新?

<my:Map.Clip> 
    <RectangleGeometry RadiusX="15" RadiusY="15" Rect="0,0,450,250" /> 
</my:Map.Clip> 

地圖是在ScrollViewer中某處的底部,只有它的一半是可見的。 問題是,當我向上滾動顯示整個地圖時,地圖中不可見的部分現在變成黑色。

當我在地圖上沒有剪輯時,不會發生此問題。它呈現正確。 那麼這是一個控制中的錯誤還是我做錯了什麼? 以前有人有過這個問題嗎?

更新:我做了一個小樣本項目來演示這個:link。另外,在做這件事的時候,我也注意到只有當地圖控件位於網格中時纔會出現問題。如果我將它直接放在ScrollViewer中,它就可以正常工作。

更新:爲網格行設置固定高度不會有幫助。另外,將grid + map放入一個stackpanel然後放入一個scrollviewer中不起作用。你們有沒有找到解決這個問題的方法?

回答

1

互動在看你的代碼,這無關在地圖捕獲手勢而不是ScrollViewer的情況下,地圖保持其原始剪輯,而不管用戶啓動其滾動的位置。

此行爲的原因是Map Silverlight控件(和WebBrowser控件也包含)本地呈現組件。例如,如in this article所述,WebBrowser具有TileHost。出於這個原因,各種Silverlight框架效果不能應用於地圖,例如RenderTransforms。

爲了解決你的問題,你將不得不強制地圖重新呈現自己,當用戶滾動。要做到這一點,我找到ScrollViewer垂直ScrollBar使用Linq-to-VisualTree,然後當用戶滾動應用非常小的縮放到地圖。這將導致它重新渲染:

using System.Linq; 
using System.Windows; 
using System.Windows.Controls.Primitives; 
using LinqToVisualTree; 
using Microsoft.Phone.Controls; 

namespace BingMapClipIssueDemo 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 

      this.Loaded += new RoutedEventHandler(ContentPanel_Loaded); 
     } 

     void ContentPanel_Loaded(object sender, RoutedEventArgs e) 
     { 

      ScrollBar verticalScroll = ContentPanel.Descendants<ScrollBar>() 
          .Cast<ScrollBar>() 
          .Where(sb => sb.Orientation == System.Windows.Controls.Orientation.Vertical) 
          .Single(); 

      verticalScroll.ValueChanged += (s, e2) => 
      { 
       map.ZoomLevel = map.ZoomLevel + 0.00001; 
      }; 

     } 
    } 
} 

只要將上面的代碼放到您的示例中,它應該可以工作。

+0

有趣。這可能實際上工作。我明天會看看我的電腦,並告訴你它是如何工作的。 – 2012-01-09 18:53:32

+0

好吧,所以我嘗試使用您的解決方案,但不幸的是我無法在我的WP7項目中使用LinqToVisualTree。 – 2012-01-10 07:42:50

+0

爲什麼不呢?只需剪切並粘貼代碼,或將其作爲wp7contrib的一部分下載並關閉。 – ColinE 2012-01-10 07:48:35

2

您不應該在ScrollViewer或Pivot,Panorama或任何其他捕捉平移/滾動手勢的控件中包含Bing Map控件。這將導致非常差的用戶體驗,因爲用戶不知道手勢是否將被地圖或主機控件捕獲。我認爲正在發生的事情是,當你滾動時,你不是在滾動ScrollViewer,而是在平移地圖。

+0

對不起,但我不認爲你理解我的問題。問題不在於誰捕獲了滾動,而是當我在滾動查看器中向下滾動以顯示整個地圖時,地圖的底部仍然是黑色,而不是渲染。我做了一個小示例項目來演示這個:[link](http://dl.dropbox.com/u/20848147/Stack%20Overflow/BingMapClipIssueDemo.zip)。另外,在做這件事的時候,我也注意到只有當地圖控件位於網格中時纔會出現問題。如果我將它直接放在ScrollViewer中,它就可以正常工作。 – 2012-01-03 10:21:12

+0

Colin仍然是絕對正確的,你***不應該在ScrollViewer中放置Bing Map控件。故事結局。 – 2012-01-06 07:34:38

+0

爲你結束故事也許,不是爲了我。我需要在滾動查看器中的地圖。無論如何,你都不應該與它進行交互,它只是在那裏顯示一個圖釘,所以沒有關於誰捕捉平移/滾動手勢的問題。 – 2012-01-06 12:16:54