贴图控制:移除或隐藏默认贴图层

本文关键字:隐藏 默认 图层 控制 | 更新日期: 2023-09-27 18:22:09

在我的Windows Phone 8应用程序中,我使用自定义TileSource来将默认地图背景与自定义磁贴重叠,如下所示:

C#:

public class CustomTileSource : TileSource
{
   public CustomTileSource()
   {
      UriFormat ="http://myurl/{0}/{1}/{2}.png";
   }
   public override Uri GetUri(int x, int y, int zoomLevel)
   {
      if (zoomLevel > 0 && zoomLevel <= 18)
      {
          var url = string.Format(UriFormat, zoomLevel, x, y);
          return new Uri(url);
       }
       //if zoom level is not supported, return null
        return null;
    }
}

XAML:

...
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
xmlns:tileSource="clr-namespace:Mappa"
...
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
   <maps:Map x:Name="Map" Center="45,9" ZoomLevel="14">
      <maps:Map.TileSources>
         <tileSource:CustomTileSource />
      </maps:Map.TileSources>
    </maps:Map>
</Grid>

我的问题是,我需要删除默认的地图图层来隐藏标签(地下车站、社区名称等)。

我知道使用具有MapTileLayer.BackgroundReplacement属性的Windows Phone 8.1可以很容易地做到这一点(如此处所示),但我找不到任何有关Windows Phone 8的信息。

贴图控制:移除或隐藏默认贴图层

我自己用新的WP8"诺基亚HERE地图"地图控件尝试过这一点,但无法实现。我不得不回到Microsoft.Phone.Controls.Maps中旧的基于"Bing"的地图控件(标记为过时)。

以下是如何删除旧Microsoft.Phone.Controls.Maps控件中的其他层:

for (var i = Map.Children.Count - 1; i >= 0; i--)
{
    MapTileLayer tileLayer = Map.Children[i] as MapTileLayer;
    if (tileLayer != null)
    {
        Map.Children.RemoveAt(i);
    }
}

尽管这个旧的地图控件在WP8中已经被取代,但新的控件似乎不支持相同的层灵活性,如果在您的应用程序中使用,"过时"的控件在WP8.1下仍然可以很好地工作。

这是我的应用程序,它仍然使用旧的控件,可能正在实现你想要做的事情-适用于Windows Phone的NZ Topo Map应用程序。