并非所有MapIcons都在地图上更新?

时间:2016-03-26 17:44:11

标签: c# xaml maps win-universal-app windows-10

我将多个MapIcons添加到我的UWP应用程序MapControl中。我想更改基于MapIcon大小的地图缩放级别。

这几乎没问题,但是当我更新标记大小(调用UpdatMarkerSizes())时,并非所有MapIcons都会获得新图像。

我的地图中有大约200个MapIcons,我尝试更新。这是一些性能问题还是我应该如何尝试更新所有MapIcons?

以下是我最初添加MapIcons的方法:

public void AddMapIcons(IReadOnlyCollection<IItem> items)
{
    var icon = (CurrentMarkerIconSize == MarkerIconSize.Small) ? _markerSmall : _markerNormal;
    foreach (var item in items)
    {
        var stopIcon = new MapIcon
        {
            Location = new Geopoint(item.Location),
            NormalizedAnchorPoint = new Point(0.5, 0.5),
            ZIndex = 5,
            CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible,
            Image = icon
        };
        MapControl.MapElements.Add(stopIcon);
    }
}

这是我的MapIcon Image更新功能,当map zoomlevel发生变化时会调用它。

private void UpdatMarkerSizes(MarkerIconSize newSize)
{
    var newImage = (newSize == StopIconSize.Small) ? _markerSmall : _markerNormal;
    foreach (var element in MapControl.MapElements)
    {
        (element as MapIcon).Image = newImage;
    }
}

更新1:

我刚注意到,如果我还更新MapIcon NormalizedAnchorPoint,ZIndex和CollisionBehaviorDesired(再次设置相同的值),这个问题就不那么糟了。以前,当我更新我的标记(UpdatMarkerSizes())时,总会有几个标记没有获得新图像。现在更新后,我很少得到一两个没有得到新图像的标记。

更新的代码:

private void UpdatMarkerSizes(MarkerIconSize newSize)
{
    var newImage = (newSize == StopIconSize.Small) ? _markerSmall : _markerNormal;
    foreach (var element in MapControl.MapElements)
    {
        var mapIconElement = element as MapIcon;
        if(mapIconElement != null)
        {
            mapIconElement.Image = newImage;
            mapIconElement.NormalizedAnchorPoint = new Point(0.5, 0.5);
            mapIconElement.ZIndex = 5;
            mapIconElement.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;

        }
    }
}

更新2: 我认为我在更新1中的解决方案现在已经足够好了。我发布了与MapIcons及其图像更新相关的新问题:Dynamically update collection of MapIcons, update process gets out of sync?

0 个答案:

没有答案