Xamarin.FormアプリではXAMLを使用して、画面に表示するページを記述できる。そのページをプロジェクトに追加する方法を解説する。
対象:Visual Studio 2015以降
2016年の春からVisual Studio 2015では、追加費用なしでXamarinが利用できるようになった。Xamarinは、C#でAndroid/iOS/Windows向けのクロスプラットフォーム開発を行うための開発環境だ。その中でXamarin.Formsを使えば、UIの構築もXAMLとC#を使って共通にできるのである。
そのように優れたXamarin.Formsなのだが、いざやってみようとすると、XAMLで画面を記述するファイル(以下ではVisual Studioで表示されるダイアログの表記に従って「Xaml」ページとする)の作り方が分からないという、肝心要のところでつまずいてしまう。どうすればいいのだろうか? 本稿では、Xamarin.FormsのプロジェクトにXamlページを追加する手順を紹介し、関連する知識を解説する。
なお、本稿では、Visual Studio 2015 Update 3およびXamarin.Forms 2.0を使って解説している。バージョンによっては細部が異なる可能性があるので、ご承知おき願いたい。
PCLプロジェクトに新しい項目を追加するときに[Forms Xaml Page]を選べばよい。
前提として、PCL(Portable Class Library、移植可能クラスライブラリ)を使ったソリューションを作っておく必要がある*1。
Xamlページを追加するには、ソリューションエクスプローラーでPCLプロジェクトを右クリックし、出てきたコンテキストメニューから[追加]−[新しい項目]を選んで[新しい項目の追加]ダイアログを出す。その左側で[Visual C#]−[Cross-Platform]−[Code]を選び、中央で[Forms Xaml Page]を選択し、ファイル名を付けてから[追加]ボタンをクリックする(次の画像)。
ポイントは、[新しい項目の追加]ダイアログの[Code]セクションにあるということだ。UWPアプリやWindowsストアアプリでは[コード]セクションとは別に[XAML]セクションがあるので、Xamarin.Formsでも[XAML]セクションを探してしまうのだが、それはないのである。
PCLプロジェクトにXamlページを追加する手順
*1 ソリューションを作るときに、[Blank App (Xamarin.Forms Portable)]か[Blank Xaml App (Xamarin.Forms Portable)]を選ぶ。これはプラットフォームに共通するコードをPCLに置くものだ。
なお、それとは別に、共通コードをShared Project(共有プロジェクト)に置くソリューションも作れる([Blank App (Xamarin.Forms Shared)]を選ぶ)。しかし、Xamarin.Forms 2.0では、Shared ProjectにXamlページを追加してもビルドできない。
上の手順でXamlページを追加しても、アプリ起動時の画面は元のままだ。追加したXamlページが表示されるように変更するには、PCLプロジェクトの「App.cs」ファイルまたは「App.xaml.cs」ファイルを編集する。
いずれのコンストラクタにも、「MainPage = ……」という行があるので、その右辺に、新しく作ったXamlページのインスタンスを指定すればよい。例えば、[Blank App (Xamarin.Forms Portable)]を選んでソリューションを作った場合は(=PCLプロジェクトに「App.cs」ファイルができる)、次のコードのように変更する。
public App()
{
// The root page of your application
//MainPage = new ContentPage
//{
// Content = new StackLayout
// {
// VerticalOptions = LayoutOptions.Center,
// Children = {
// new Label {
// HorizontalTextAlignment = TextAlignment.Center,
// Text = "Welcome to Xamarin Forms!"
// }
// }
// }
//};
// ↓ 元のコードを次のように修正する
MainPage = new XamlPage1();
}
自動生成されたXamlページのXAMLコードは、次のコードに示すように、Labelコントロールだけが1つだけ置かれたものだ。これだけでは、どのようにしてコントロールを追加していけばよいのか、分からないだろう。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="dotNetTips1153Xaml.XamlPage1">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>
複数のコントロールを画面にレイアウトするには、Layoutクラス(Xamarin.Forms名前空間)を継承したコントロールのうち、AbsoluteLayout/Grid/RelativeLayout/StackLayoutの4つのコントロールのいずれかを使う(次の画像の下段)。
複数のコントロールをレイアウトする方法が分かれば、WPFアプリやUWPアプリでXAMLに慣れている人なら、どんどん試行錯誤して進めていけるだろう。例えば、次のコードのようにStackLayoutコントロールと2つのLabelコントロールを2つ配置してみる。すると実行結果はその次の画像のようになる。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="dotNetTips1153Xaml.XamlPage1">
<!--<Label Text="{Binding MainText}" VerticalOptions="Center"
HorizontalOptions="Center" />-->
<StackLayout BackgroundColor="White">
<Label Text="Hello,"
HorizontalOptions="Center"
VerticalOptions="EndAndExpand"
FontSize="Large" TextColor="Red"
/>
<Label Text="Xamarin.Forms !!"
HorizontalOptions="Center"
VerticalOptions="StartAndExpand"
FontSize="Medium" TextColor="Blue"
FontAttributes="Bold,Italic"
/>
</StackLayout>
</ContentPage>
Xamarin.FormsのPCLプロジェクトにXamlページを追加するには、新しい項目を追加するダイアログで[Forms Xaml Page]を選べばよい。また、そのようにして生成されたXamlページにレイアウト用のコントロールを配置する方法も簡単に紹介した。
利用可能バージョン:Visual Studio 2015以降
カテゴリ:Xamarin 処理対象:Xamarin.Forms
Copyright© Digital Advantage Corp. All Rights Reserved.