【问题标题】:How can I clear all the pushpins from my Bing Map and still be able to add more after that?如何从我的 Bing 地图中清除所有图钉,然后仍然可以添加更多图钉?
【发布时间】:2014-11-14 23:42:46
【问题描述】:

我可以在我的地图上添加一堆图钉,然后添加更多,而不是添加更多(等等),但如果我想“重新开始”并调用它:

photraxMap.Children.Clear();

(photraxMap 是我的必应地图的名称),它确实清除了所有图钉,但随后尝试添加图钉失败。

也就是说,它在视觉上失败了。单步执行代码,图钉已创建,它们只是不显示在地图上。

每次我添加图钉时,都会使用此代码:

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);
    }
    . . .

公共静态 IEnumerable FindVisualChildren(DependencyObject depObj) 其中 T : 依赖对象 { 如果(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]);
}

...我从这里的一只猫那里得到的:How can I remove specified pushpins?

有些东西仍然阻止随后添加的图钉显示,但...

【问题讨论】:

    标签: c# bing-maps children


    【解决方案1】:

    这是有效的:

    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 本身之前已被破坏;通过确保我只删除图钉,它运作良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      相关资源
      最近更新 更多