2014-03-30 100 views
0

我有了(該PAGE_LOADED事件中)置於其上幾個圖像一個地圖WP8刪除圖像

 MapLayer pinLayer = new MapLayer(); 

     MapOverlay pin50 = new MapOverlay(); 
     pin50.GeoCoordinate = new GeoCoordinate(49.42563670946435, -0.44644108276367537); 

     Canvas myCanvas50 = new Canvas(); 
     // The image is defined globally 
     pin50.PositionOrigin = new Point(0.5, 0.5); 
     image50.Source = new BitmapImage(new Uri("Images/Destroyer.png", UriKind.Relative)); 

     image50.Opacity = 1; 

     Point point50 = new Point(1.0, 1.0); 
     Canvas.SetLeft(image50, point50.X); 
     Canvas.SetTop(image50, point50.Y); 
     myCanvas50.Children.Add(image50); // <=== ERROR OCCURS HERE 
     // Making an event handler for the image so that we can 'tap' on it 
     image50.DoubleTap += image50_DoubleTap; 

     pin50.Content = myCanvas50; 

     pinLayer50.Add(pin50); 
     map_J.Layers.Add(pinLayer); 

它工作正常的所有圖像。然而,當我點擊一張圖片時,它會導航到一個新頁面,並給出對被點擊圖片的描述。 問題是,當用戶導航回到這個地圖(通過直觀地按下硬件BACK BUTTON),應用程序崩潰,因爲錯誤「元素已經是另一個元素的孩子」。 我猜測,頁面仍然加載,所以當它被導航回它得到'重新加載',所以不能將相同的圖像添加到相同的畫布等。

我試着添加以下內容來清除從地圖的所有信息從該頁面就離開了,但它並不能幫助: 保護覆蓋無效OnNavigatedFrom(NavigationEventArgs E) { base.OnNavigatedFrom(E);

 var toRemove = new List<MapLayer>(); 
     foreach (MapLayer lyr in map_J.Layers) 
     { 
      toRemove.Add(lyr); 
     } 

     // now do the actual removal 
     foreach (var child in toRemove) 
     { 
      map_J.Layers.Remove(child); 
     } 


    } 

任何想法?有沒有更好的方法來處理地圖/元素的重新加載?

回答

0

我會建議清除圖層每次用戶離開頁面。

這個代碼添加到主標籤視圖的XAML代碼:

<phone:PhoneApplicationPage 
    ... 
    Unloaded="PhoneApplicationPage_Unloaded" > 

而這背後的事件代碼:

private void PhoneApplicationPage_Unloaded(object sender, RoutedEventArgs e) 
{ 
    map_J.Layers.Clear(); 
} 
+0

不幸的是,同樣的錯誤仍然出現在導航返回頁面。就好像該頁面在向前導航時存儲在某個緩衝區中,並且正在嘗試在返回時將該圖像添加到另一個Canvas中...並且它無法執行此操作。 –