我有一张地图上放置了几张图片(在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);
}
}
有什么想法吗?有没有更好的方法来处理地图/元素的重新加载?
答案 0 :(得分:0)
我建议每次用户离开页面时清除地图图层。
将此代码添加到视图的XAML代码中的主标记:
<phone:PhoneApplicationPage
...
Unloaded="PhoneApplicationPage_Unloaded" >
此事件代码背后:
private void PhoneApplicationPage_Unloaded(object sender, RoutedEventArgs e)
{
map_J.Layers.Clear();
}