Bing Maps в каждом элементе списка добавьте новую метку
Я пытаюсь добавить несколько кнопок из списка в Bing Maps на Windows Phone. Название каждой метки должно быть разным, потому что я хочу иметь возможность удалить их по отдельности позже, используя MainMap.Children.Remove(SpecificPushpin);
,
Это мой foreach:
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);
}
Конечно, я получаю ошибку после первого цикла через foreach на MainMap.Children.Add(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 ответа
Вместо использования Bing Maps я использовал Map Control и работал с MapLayers
а также MapOverlay
, Я создал другой 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();
}
}
Вы можете назначить каждому вашему Pushpin свойство, например:Tag. И каждый тег не совпадает с другим. Поэтому, когда вы удаляете конкретную канцелярскую кнопку. Вы можете использовать foreach так:
foreach(PushPin pushpin in yourPushpinList)
{
if (pushpin.Tag == yourValue)
{
MainMap.Children.Remove(SpecificPushpin);
break;
}
}
код может быть не правильным, это просто пример.