古事連記帖

趣味のこと、技術的なこと、適当につらつら書きます。

Windows Phone の MapControl に Bing Mapsを載せる方法

id:kazuakix 先生がマップ関連でお困りだったようで

Windows Phone 8 の MapControl に Bing Mapsを載せる方法がわからんということなので、メモ程度に書いておこうかと思います。


WP8.x から Map コントロールがBingからHereにかわり、使い勝手がやや変わっていますが、実はずいぶん前、WP7.x時代に高橋忍さんが実践していたことがほぼそのまま使えるんです。
MSDN Blogs

とりあえずコード。
まず MainPage.xaml

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App7"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
    x:Class="App7.MainPage"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Maps:MapControl x:Name="Map"/>
    </Grid>
</Page>

残念ながらXAMLだけで完結できないので、仕方なくコードビハインドにも。
MainPage.xaml.cs

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Maps;
using Windows.UI.Xaml.Navigation;

namespace App7
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 20141226 追記
            this.Map.Style = MapStyle.None;

            var mapTile = new MapTileSource
            {
                DataSource = 
                new HttpMapTileDataSource("http://ecn.t1.tiles.virtualearth.net/tiles/r{quadkey}.png?g=1&mkt=ja-jp")
            };
            this.Map.TileSources.Insert(0, mapTile);
        }
    }
}

これで地図はこうなります
f:id:ChiiAyano:20141225103220p:plain

Bing Mapsキター でも元あったHere Mapsの情報は残ったままですね…
これを消す方法は見当たらなかったので、誰か教えてください。


ちなみに、気合い入れればWP7.x時代のBing Map Controlを、WP8.x Silverlight なら使うこともできます。WinRTだとたぶんダメですが…

2014年12月26日追記

Here Mapsの地図が載っかったままだったのは id:kazuakix さんが解決法を教えてくれました。


MapControl.Style プロパティを MapStyle.None にすればよかったみたいです。
上記コードに追記しておきました。