実際にVisual Studio 2015*5を使ってWindows 10用のユニバーサルアプリを作ってみよう。本稿執筆時点の開発環境では、新規プロジェクトを作成するときのダイアログは次の画像のようになっている。
今のところアプリ用のプロジェクトテンプレートは[Blank Application (UAP)]しかないので、それを選んでプロジェクトを生成しよう(次の画像)。従来からのWindowsストアアプリ開発者には見慣れた、何もない黒い画面を含むプロジェクトが生成される。
最初に書くコードはお約束の「Hello, world!」だが、ちょっとひねってタイトルバーに表示してみよう(次のコード)。
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView();
appView.Title = "Hello, Window 10!";
appView.TitleBar.BackgroundColor = Windows.UI.Color.FromArgb(0xff, 0x00, 0xa2, 0xe8);
appView.TitleBar.ForegroundColor = Windows.UI.Colors.White;
……省略……
デスクトップ上でデバッグ実行すると、次の画像のようになる。
さて、この「Hello, world!」アプリはユニバーサルアプリである。Windows 10 for phonesでも実行できるのだ(次の画像、なおアプリのタイトルが画面に表示されていないがそれは次項で修正する)。
最後に、このプロジェクトの参照設定を見ておこう(次の画像)。プロジェクトテンプレートで自動生成されたままのものである。参照設定に[Universal App Platform]があるが、これが前述した共通のAPIセットである。
次に、Windows 10 for phones専用のAPIを使ってみよう。それにはまず、Windows Mobile Extension SDKを参照設定に追加する(次の画像)。
これでコードからWindows 10 for phones専用のAPIを呼び出せるようになったが、それだけではPCで実行したときにうまく動かない(恐らく例外が発生するだろう)。try〜catchする手もあるが、コードが見苦しいだけでなく、処理コストも高くつく。そこで、次のコードのようにApiInformationクラス(Windows.Foundation.Metadata名前空間)を使って、そのAPIが利用可能かどうかを使う前にチェックする。
// 前述のコード(タイトルバーに文字列を表示する)
var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView();
appView.Title = "Hello, Window 10!";
appView.TitleBar.BackgroundColor = Windows.UI.Color.FromArgb(0xff, 0x00, 0xa2, 0xe8);
appView.TitleBar.ForegroundColor = Windows.UI.Colors.White;
// 以下、追加したコード
const string ClassFullName = "Windows.UI.ViewManagement.StatusBar";
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent(ClassFullName))
{
// Windows 10 for phonesで実行中→ステータスバーに表示する
var statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
statusBar.ProgressIndicator.Text = "Hello, Window 10!";
statusBar.BackgroundColor = Windows.UI.Color.FromArgb(0xff, 0x00, 0xa2, 0xe8);
statusBar.BackgroundOpacity = 1.0;
statusBar.ForegroundColor = Windows.UI.Colors.White;
#pragma warning disable CS4014 // awaitしていないときの警告を抑止
statusBar.ProgressIndicator.ShowAsync();
#pragma warning restore CS4014
}
これを実行してみると、デスクトップでは変化がないが、Windows 10 for phonesでは次の画像のようになる。
ApiInformationクラスには、次の画像に示すメソッドが用意されている。
Copyright© Digital Advantage Corp. All Rights Reserved.