それではUIを作成していこう。ソリューションエクスプローラーで「MainPage.xaml」ファイルをダブルクリックすると、ビューデザイナーが開く(次の画像)。
ビューデザイナーの上部はデザインペインと呼ばれる(分かりにくいので、以降は「プレビュー画面」という)。下部はXAMLペインと呼ばれる(同じく、以降は「XAMLエディター」とする)。
Windowsフォームのビューデザイナーには、XAMLエディターの部分はなかった。WindowsフォームのビューデザイナーでUIを作成すると、その情報はコードビハインドの「Form1.Designer.cs」ファイルにC#のコードとして書き込まれていた。それがUWPアプリでは、UIの情報はXMLの一種であるXAML記法を用いて「MainPage.xaml」ファイルに書き込まれるのだ。
次に、プレビュー画面の上部に注目してほしい(上の画像で赤枠を付けた部分)。UWPアプリはさまざまなデバイスで動作するので、デバイスの違いや画面の向きをここでシミュレートできるようになっている。取りあえずデスクトップ用のUIを作ることにして、ここを次の画像のように切り替えておいてほしい。なお、プレビュー画面の左下にある数字のドロップダウンで表示倍率を変更できる([Ctrl]キーを押しながらマウスホイールを回転させてもよい)。
では、UIのコントロールをページに配置していこう。Windowsフォームではアプリの画面のことを「フォーム」と呼んでいたが、UWPアプリでは「ページ」と呼ぶ。コントロールの配置は、Windowsフォームのときと同じようにしてもできる(コントロールを置きたい場所をクリックしておいてツールボックスでコントロールをダブルクリックするなど)。
ところで、Windowsフォームで複雑なUIを作っているときに、思った通りの入れ子関係を作れなくてイライラしたことはないだろうか? UWPアプリでは、(プレビュー画面ではなく)XAMLエディターの側でコントロールを配置することで、思った通りの入れ子関係を確実に実現できる。XAMLエディターでコントロールを配置したい場所をクリックし、それからツールボックスで目的のコントロールをダブルクリックすればよい(次の画像)。
配置したコントロールのプロパティやイベントハンドラーを変更するには、Windowsフォームと同様にプロパティウィンドウを利用できる(プロパティウィンドウが表示されていないときは、上部のメニューバーで[表示]−[プロパティ ウィンドウ]を選択する)。目的のコントロールをクリックすると、そのプロパティ一覧がプロパティウィンドウに表示されるので、そこで設定していけばよい。Windowsフォームと異なるのは、プレビュー画面だけでなくXAMLエディターで目的のコントロールをクリックしてもよいことだ。
慣れてきたら、コントロールの配置とそのプロパティをXAMLエディターから直接キー入力することで設定してみよう。IntelliSenseが働くので、意外と少ない打鍵数で入力できることに気付くだろう。例えば次の画像は、ButtonコントロールをXAMLエディターで入力しているところだ。以降は、XAMLコードだけを示すことにする。
コントロールの位置調整であるが、UWPアプリではさまざまなデバイスに対応するために、Webでいうところの「リキッドレイアウト」/「レスポンシブデザイン」が重要になる。Windowsフォームではアプリ側でウィンドウのサイズを固定することもできた。UWPアプリではそれはできないので、少なくとも「リキッドレイアウト」は必須である。UWPアプリでもコントロールの位置を絶対座標で指定することは可能ではあるが、ウィンドウサイズが変更されてもUIが破たんしないような相対的な指定が求められる。
*11 「リキッドレイアウト」/「レスポンシブデザイン」については、「5分で分かるレスポンシブWebデザイン」を参照。
ここでは、Gridコントロールを上下に2分割して、下側は高さを一定にしよう。そして、上のエリアの中央にTextBlockコントロール(WindowsフォームのLabelコントロールに相当)を置き、下のエリアの中央にはButtonコントロールを配置しよう。フォントのサイズと色の設定、また、Buttonコントロールにはその周囲のマージン設定も行うと、次のコードと画像のようになる。
<Page
……省略……
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<!-- Gridコントロールを上下に2分割する -->
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- TextBlockコントロール -->
<TextBlock x:Name="textBlock1" Text="Hello, UWP!"
FontSize="48" Foreground="DodgerBlue"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<!-- Buttonコントロール -->
<Button Grid.Row="1" x:Name="button1" Content="現在時刻"
FontSize="24" HorizontalAlignment="Center" Margin="0,20"/>
</Grid>
</Page>
Copyright© Digital Advantage Corp. All Rights Reserved.