rksoftware

Visual Studio とか C# とかが好きです

[クラシックデスクトップアプリ] Xamarin.Forms で MAP コントロールを使う

Xamarin.Forms では MAP コントロールも扱えますが、少し注意が必要です。
使い方としては NuGet で Xamarin.Forms.Maps を取得してよしなにしてやればよいだけです。

しかし、そこではまってしまいました。

■ はまったポイント

NuGet パッケージは、Xamarin.Forms.Maps です。
そこで間違えて Xamarin.Forms.Map と最後の s を抜いて検索をしていました。
きちんと最後の s まで合ってないと検索で出てこないんですね...。

適当にではなく、きちんと調べて確実にコピペしていれば問題ない点ですが、私と同じ失敗をする方がいらっしゃるかもしれませんので、恥を忍んでメモしておきます。

■ WPF の場合

Xamarin.Forms.WPF のばあいはさらに、NuGet から Xamarin.Forms.Maps.WPF も追加する必要があります。
※Map コントロールを使用するしないにかかわらず、Xamarin.Forms.WPF の場合にはさらに Xamarin.Forms.Platform.WPF

■ その後の手順

NuGet からパッケージを取得しただけでは、画面に地図は出てきません。もう少し手順が必要です。

■ FormsMaps.Init() メソッド

まず、起動時のコードでいったん Xamarin.Forms.Maps 内の Init メソッドを呼びます。
これを書いておかないと、 Xamarin.Forms.WPF では マップが表示されません。

■ XAML の xmlns の追加

MAP コントロールは、独自のアセンブリ、名前空間になっているため、XAML で使用する場合、名前空間の指定をする必要があります。
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
コントロールを使うところでは、次のようになります。 <maps:Map/>
全体としては次のようになります。
この例では、プロジェクト名を XWpfV3 として作成しています。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
 xmlns:local="clr-namespace:XWpfV3"
 xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
 x:Class="XWpfV3.MainPage"
 NavigationPage.HasNavigationBar="False">
  <StackLayout>
    <maps:Map/>

■ 実行

このように bing マップが表示されます。

f:id:rksoftware:20180420013658j:plain

■ NuGet パッケージ

補足として、WPF プロジェクトの NuGet は次のようになりました。

f:id:rksoftware:20180420013713j:plain
※執筆時

WPF はある視点で見れば現役人気最高のプラットフォームです。
簡単に試せますので、ぜひ試してみてください。