0

我的 wp8 应用程序从 xml 加载了不同的协调,所有协调都应该显示在地图中?我的应用程序中的每一件事都是动态创建的,所以我以编程方式创建地图并添加 maplayer 和 mapoverlay。但似乎我不能向 maplayer 添加多个 mapoverlay。请帮我。

MapOverlay myLocationOverlay = new MapOverlay();
                myLocationOverlay.Content = pinIMG;
                myLocationOverlay.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay.GeoCoordinate = new GeoCoordinate(57.724611, 12.938945);

MapOverlay myLocationOverlay2 = new MapOverlay();
                myLocationOverlay2.Content = pinIMG;
                myLocationOverlay2.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay2.GeoCoordinate = new GeoCoordinate(57.724155, 12.939023);

MapLayer myLocationLayer = new MapLayer();
myLocationLayer.Add(myLocationOverlay);
myLocationLayer.Add(myLocationOverlay2);
MyMap.Layers.Add(myLocationLayer);

它适用于一个 mapoverlay 但不是两个。

4

2 回答 2

0

通过使用您的示例,我发现将相同的Image对象分配给MapOverlays' content 变量不起作用(抛出调试异常)。给MapOverlays一个独特的Image对象是解决方案:

假设您使用的是位图图像,那么这就足够了:

BitmapImage bmp = new BitmapImage(new Uri("/Assets/pinIMG.png", UriKind.Relative));

System.Windows.Controls.Image pinIMG1 = new System.Windows.Controls.Image();
pinIMG1.Source = bmp;

System.Windows.Controls.Image pinIMG2 = new System.Windows.Controls.Image();
pinIMG2.Source = bmp;

// MapOverlay and MapLayer setup (each overlay gets its on pinIMG...)

听起来您可能在MapOverlays从 XML 加载坐标时使用循环生成。如果是这种情况,只需在每次循环中设置一个新图像,而不是在循环的每次迭代中重用相同的实例。

于 2013-01-14T23:12:05.497 回答
0

请在另一个线程中查看我对这个问题的回答@How can I add programmatically add a PushPin, and can I make it have a custom image?

简短的版本是您可以在单个 MaPlayer 中以编程方式生成多个 MapOverlay,或者您可以使用 MapExtensions 图钉数据绑定来为您执行此操作。

此外,您的代码中存在错误。您不能将相同的 UIElement(在本例中为 Image)添加到可视化树两次。正如 user8709 所说,您应该为每个 MapOverlay 创建一个新的 UIElement。

于 2013-01-15T00:03:28.693 回答