実際に開発するとなると、Windows 8.1/Windows Phone 8.1とWindows 10の違いが気になるだろう。プラットフォームが想定しているUXを無視したUIを設計すると作りにくい上に、使いにくいものになってしまう。利用できるAPIを知らなければ、どのような機能が実装できるか決定できないだろう。
以降ではまず、Windows 10でのUXで、アプリの設計に大きく関わる変更点を解説する。それから、新しいコントロールやAPIを紹介していこう。
Windows 8.1に比べてWindows 10では、かなり大きくUXが変更された。「Windowsストアアプリが単にデスクトップ上のウィンドウとして動くようになった」というだけではないのである。大きな変更点は主に次の4点である。
いずれもUI設計に大きく影響が及ぶ変更だ。順に見ていこう。
チャームの廃止は、Windows 10 TPを試してみるとすぐに気が付くだろう。Windows 8.1では画面の右端から出ていたチャームがなくなったのだ(代わりにWindows 10では通知センターが表示される)。チャームにあった共有や設定などの機能を呼び出すには、アプリにUIを設置することになる(次の画像)*11。
*11 チャームにあった共有や設定などの機能をアプリから呼び出す方法については、「WinRT/Metro TIPS:コードから設定チャームやアプリバーを開くには?[ユニバーサルWindowsアプリ開発]」を参照。
アプリバーはWindows 10でも利用可能だが、新しく登場した「ハンバーガーメニュー」方式が増えていくだろう。「三」という字に似た形の横棒を3本重ねたアイコン(「ハンバーガーボタン」/「ハンバーガー」などと通称する)をタップすることで、次の画像のようにメニューを開閉するのだ。
Windows 10では、項目の並び方向と、画面スクロール方向が入れ替わった(次の画像)。これは、UI設計にとって大きな変化である。なお、GridViewコントロール(Windows.UI.Xaml.Controls名前空間)の既定のスタイルも、これに合わせて変更されている。
Windows 8.1では、ウィンドウの最小高さは768ピクセルあるとしてUIを設計していればよかった。これに対して、Windows 10では、最小高さがかなり小さくなるのだ。ユニバーサルアプリでは、Xboxの960×540ピクセルやphoneの800×480ピクセルに対応しなければならない。それだけではなく、PCにおいても、画面の最小要件が800×600ピクセルに下げられたため、ウィンドウの最小高さは500ピクセル程度しかないのだ(次の画像)。
Windows 10のUXは大きく変更されるが、それに適した新しいコントロールも追加されている。その他にも、便利なコントロールが増えている。いくつか紹介しておこう。
まずは、ハンバーガーメニューの実装に便利なSplitViewコントロール(Windows.UI.Xaml.Controls名前空間)だ。すでに、AdaptiveTriggerの説明のところなどでお見せしているので、ここでは画像は省略する。次のコードのようにして使う。
<SplitView x:Name="Splitter" DisplayMode="CompactInline"
CompactPaneLength="32" PaneBackground="DarkSeaGreen">
<SplitView.Pane>
<Grid>
……省略(ここにメニューを記述する)……
</Grid>
</SplitView.Pane>
<SplitView.Content>
<Grid>
……省略(ここに画面のコンテンツを記述する)……
</Grid>
</SplitView.Content>
</SplitView>
RelativePanelコントロール(Windows.UI.Xaml.Controls名前空間)を使うと、コントロールの相対的な位置決めが簡単にできる。例えば、あるコントロールの右側に、上端をそろえて別のコントロールを配置するには、これまでならばGridコントロール(Windows.UI.Xaml.Controls名前空間)を使って行と列を定義しただろう。RelativePanelコントロールでは次のようになる(次の画像とコード)。記述が楽になる他に、例えば左右配置を上下配置に切り替えたりすることが簡単になる(Adaptive UXで利用しやすい*12)。
<RelativePanel Background="#444" Grid.Row="1">
<!-- 相対指定の基準とするコントロール(赤色) -->
<Border x:Name="TargetBox" Width="300" Height="200" Background="DarkRed"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.AlignVerticalCenterWithPanel="True">
<TextBlock Text="TAERGET" />
</Border>
<!-- 相対指定で位置決めするコントロール(緑色) -->
<Border x:Name="Box1" Background="LimeGreen"
RelativePanel.RightOf="TargetBox"
RelativePanel.AlignTopWith="TargetBox">
<TextBlock Text="BOX1" />
</Border>
</RelativePanel>
*12 前述のAdaptiveTriggerを使ったVisualStateを記述する際には、添付プロパティをかっこで囲む。例えば、「BOX1」を「TARGET」の左側に付けるには「<Setter Target="Box1.(RelativePanel.LeftOf)" Value="TargetBox" />」とする。
「ようやく来たか、待ってました!」というコントロールもあるので、紹介しておこう。MapControlコントロール(Windows.UI.Xaml.Controls.Maps名前空間)だ。地図を表示するだけでなく、場所検索やルート検索にも対応しているようだ。「プッシュピン」(Windows.UI.Xaml.Controls.Maps名前空間のMapIconコントロール)なども表示できる。MSDNのページを見ると「Device family」欄がUniversalとなっている。このコントロールがWindows 10 for phonesやIoTでも使えるというのである。
MapControlコントロールを使ったサンプルコードがマイクロソフトから公開されている*13。ビルドして実行した様子を次の画像に示す。
*13 MapControlコントロールを使ったこのサンプルコードはGitHubで公開されている。「Windows-universal-samples」からダウンロードできるZIPファイル中に含まれている「mapcontrolsample」フォルダーの下の、「cs」フォルダーに入っているソリューションがそれである。なお、ダウンロードするには画面右側の[Download ZIP]ボタンを使う(その上の[Clone in Desktop]ボタンはプロジェクトに貢献する場合に使うためのものだ)。
Copyright© Digital Advantage Corp. All Rights Reserved.