Я динамически добавляю канцелярские кнопки на карту Bing. Я также хочу удалить некоторые из них (на основе значения, встроенного в их свойство Tag). Для этого мне нужно определить MapOverlay канцелярской кнопки, и если да, то как я могу это сделать?
Как я могу удалить указанные канцелярские кнопки?
Ответы (2)
Я не уверен, о какой среде вы говорите, но похоже, что это не Windows 8.
Итак, вот код для Windows Phone 7.1. Это предполагает, что в дочерней коллекции вашей карты есть только канцелярские кнопки. Если у вас также есть другие элементы пользовательского интерфейса, вам придется отфильтровать их, прежде чем переходить к свойству Tag;)
Pushpin t1 = new Pushpin();
t1.Tag = "t1";
map1.Children.Add(t1);
Pushpin t2 = new Pushpin();
t2.Tag = "t2";
map1.Children.Add(t2);
Pushpin t3 = new Pushpin();
t3.Tag = "t3";
map1.Children.Add(t3);
// LINQ query syntax
var ps = from p in map1.Children
where ((string)((Pushpin)p).Tag) == "t1"
select p;
var psa= ps.ToArray();
for (int i = 0; i < psa.Count();i++ )
{
map1.Children.Remove(psa[i]);
}
// or using method syntax
var psa2= map1.Children.Where(y => ((string)((Pushpin)y).Tag) == "t2").ToArray();
for (int i = 0; i < psa2.Count(); i++)
{
map1.Children.Remove(psa2[i]);
}
Карта1 определяется на главной странице приложения; XAML вот так:
<my:Map HorizontalAlignment="Stretch" Name="map1" VerticalAlignment="Stretch" />
person
hans
schedule
29.12.2012
Это это Windows 8, приложение Магазина Windows, а не Windows Phone. Я пишу дополнительное приложение для Windows Phone, но этот код не для этого (обозначается тегами Bing Maps, в отличие от Nokia); приложение для телефона записывает местоположение, но не отображает его.
- person B. Clay Shannon; 30.12.2012
В вашем первом фрагменте кода, я думаю, проблема в том, что вы меняете (через bingMap.Children.Remove) исходную коллекцию (bingMap.Children) из цикла foreach, который повторяет исходную коллекцию. Я ожидал, что это не сработает и выдаст исключение. Вот почему я использую for вместо foreach в своем примере. Мой пример кода (также для карты Bing) должен работать в Windows 8 так же, как и в Windows Phone.
- person hans; 07.01.2013
Я думаю, что это может сработать:
var pushPins = SOs_Classes.SOs_Utils.FindVisualChildren<Pushpin>(bingMap);
foreach (var pushPin in pushPins)
{
if (pushPin.Tag is SOs_Locations)
{
SOs_Locations locs = (SOs_Locations) pushPin.Tag;
if (locs.GroupName == groupToAddOrRemove)
{
bingMap.Children.Remove(pushPin);
}
}
}
// Я получил это от кого-то где-то, но забыл указать, кто/где
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj == null)
{
yield break;
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (var childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
person
B. Clay Shannon
schedule
24.12.2012