如何清除必应地图中的所有图钉,之后仍然可以添加更多图钉
本文关键字:之后 添加 清除 何清除 地图 | 更新日期: 2023-09-27 18:30:23
我可以在我的地图中添加一堆图钉,然后添加更多,而不是添加更多(等等),但如果我想"重新开始"并调用它:
photraxMap.Children.Clear();
(photraxMap 是我的 Bing 地图的名称),它确实清除了所有图钉,但随后添加图钉的尝试失败了。
也就是说,它在视觉上失败了。单步执行代码,图钉已创建,它们只是不显示在地图上。
每次添加图钉时,都会使用以下代码:
private async void Gener8MapMarkers(IEnumerable<PhotraxBaseData> _pbd)
{
MapLayer ml = new MapLayer();
App.dynamicMapLayers.Add(ml);
photraxMap.Children.Insert(0, ml);
. . .
..然而,一旦地图被清除,它就不会再显示图钉了。
是因为设计时地图图层也被清除了吗?也就是说,这个:
<bm:Map x:Name="photraxMap" Credentials="MyOtherPetIsADuckbilledPlatypus" Margin="0,0,0,0" MapType="Birdseye" >
<bm:Map.Children>
<!-- Data Layer-->
<bm:MapLayer Name="DataLayer"/>
?
如果是这样,我怎样才能防止它被调用 photraxMap.Children.Clear() 来清除;或者我怎样才能复活它?
更新
一定是地图不刷新或其他问题。就像我可以单步执行代码一样
并看到正在创建的图钉,但随后在地图上看不到它们(清除地图后),因此使用此代码清除图钉也是
:private void ClearMap()
{
var pushPins = FindVisualChildren<Pushpin>(photraxMap);
foreach (var pushPin in pushPins)
{
photraxMap.Children.Remove(pushPin);
}
. . .
public static IEnumerable FindVisualChildren(DependencyObject depObj) 其中 T :依赖对象 { if (depObj == null) { 产量突破; }
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;
}
}
}
我逐步浏览"photraxMap.Children.Remove(pushPin);",它被点击了正确的次数(每个图钉一次),但是当它完成运行时,我仍然在那里看到图钉。
至少使用此代码:
photraxMap.Children.Clear();
图钉实际上确实消失了(但随后不允许任何后续添加(可见)图钉。
更新 2
不要问我为什么,但图钉确实会随着以下代码消失:
var ps = from p in photraxMap.Children
select p;
var psa = ps.ToArray();
for (int i = 0; i < psa.Count(); i++)
{
photraxMap.Children.Remove(psa[i]);
}
。我从这里的一只猫那里得到的:如何删除指定的图钉?
不过,某些东西仍然阻止显示随后添加的图钉......
这是有效的:
var mapLayerChildren = from c in DataLayer.Children select c;
var kinderGarten = mapLayerChildren.ToArray();
for (int i = 0; i < kinderGarten.Count(); i++)
{
if (kinderGarten[i] is Pushpin)
{
DataLayer.Children.Remove(kinderGarten[i]);
}
}
我认为DataLayer本身以前被销毁了;通过确保我只删除图钉,它运行良好。