Bing Maps foreach项目列表中添加了新的图钉

时间:2014-04-21 10:25:25

标签: c# windows-phone-8 bing-maps children pushpin

我正在尝试将列表中的多个图钉添加到Windows Phone上的Bing地图。每个图钉的名称需要不同,因为我希望以后能够使用MainMap.Children.Remove(SpecificPushpin);单独删除它们。

这是我的预言:

Pushpin pushpin = new Pushpin();
Attractions attractions = new Attractions();
foreach (var attraction in Attractions.allAttractions)
{
    pushpin.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude);
    pushpin.Content = attraction.Title;
    pushpin.Background = new SolidColorBrush(Colors.Blue);
    pushpin.Foreground = new SolidColorBrush(Colors.White);
    MainMap.Children.Add(pushpin);
}

当然,我在MainMap.Children.Add(pushpin);行的第一个循环后收到错误,因为“pushpin”已经是现有名称。

我也试过用这个:

MainMap.Children.Add(new Pushpin() { Content = attraction.Title, GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude), Background = new SolidColorBrush(Colors.Yellow), Foreground = new SolidColorBrush(Colors.Black) });

然而,我永远无法单独推出图钉。

有谁知道我如何为列表中的每个图钉提供变量名称,或者知道另一种解决问题的方法?

2 个答案:

答案 0 :(得分:1)

我没有使用Bing地图,而是使用地图控件并与MapLayersMapOverlay合作。我为每个列表类创建了一个不同的MapLayer并单独删除它们。

这样就可以简单地删除一个图钉列表。这是一个例子:

    private void LoadAttractions()
    {
        if (cbxAttractions.IsChecked != false)
        {
            Attractions attractions = new Attractions();
            foreach (var attraction in Attractions.allAttractions)
            {
                Pushpin pushpin = new Pushpin();
                pushpin.Name = attraction.Title;
                pushpin.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude);
                pushpin.Content = attraction.Title;
                pushpin.Background = new SolidColorBrush(Colors.Yellow);
                pushpin.Foreground = new SolidColorBrush(Colors.Black);

                MapOverlay MyOverlay = new MapOverlay();
                mapLayerAttractions.Add(MyOverlay);

                MyOverlay.Content = pushpin;
                MyOverlay.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude);
                MyOverlay.PositionOrigin = new Point(0.0, 1.0);

            }
            MainMap.Layers.Add(mapLayerAttractions);
        }
    }

点击cbxAttractions时:

private void cbxAttractions_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        if (cbxAttractions.IsChecked == false)
        {
            MainMap.Layers.Remove(mapLayerAttractions);
        }
        else
        {
            LoadAttractions();
        }
    }

答案 1 :(得分:0)

您可以为每个Pushpin提供一个属性,例如:Tag。并且每个标签与另一个标签不同。所以当你删除一个特定的图钉。您可以像这样使用foreach:

foreach(PushPin pushpin in yourPushpinList)
{
    if (pushpin.Tag == yourValue)
    {
        MainMap.Children.Remove(SpecificPushpin);
        break;
    }
}

代码可能不正确,这只是一个例子。