WP8从地图中删除图像(导航回页面时出错)

时间:2014-03-30 21:03:03

标签: windows-phone-8 here-api

我有一张地图上放置了几张图片(在page_loaded事件内)

        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),应用程序因错误而崩溃&#34;元素已经是另一个元素的子元素。&#34; 我猜测该页面仍然被加载,所以当它被导航回来时,它会被重新加载&#39;所以不能将相同的图像添加到同一个画布等。

我尝试添加以下内容以清除地图中的所有信息,然后再离开页面,但它没有帮助:         protected override void 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);
        }


    }

有什么想法吗?有没有更好的方法来处理地图/元素的重新加载?

1 个答案:

答案 0 :(得分:0)

我建议每次用户离开页面时清除地图图层。

将此代码添加到视图的XAML代码中的主标记:

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

此事件代码背后:

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