【发布时间】:2014-04-01 20:30:11
【问题描述】:
我有一张地图,上面放了几张图片(在 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)时,应用程序由于错误“元素已经是另一个元素的子元素”而崩溃。 我猜该页面仍在加载,因此当它导航回它时会“重新加载”,因此无法将相同的图像添加到相同的画布等。
在离开页面之前,我尝试添加以下内容以清除地图中的所有信息,但这无济于事: 受保护的覆盖无效 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);
}
}
有什么想法吗?有没有更好的方法来处理地图/元素的重新加载?
【问题讨论】: