Windows 10に備え、Windows 8.1用のユニバーサルWindowsアプリのアプリバーをタッチ操作で簡単に表示するための方法を解説する。
powered by Insider.NET
Windows 8.1向けに開発したWindowsランタイムアプリをWindows 10にインストールすると、アプリバーをタッチで開く操作がやりにくくなる。Windows Phoneのように、アプリバーを閉じてもちょっとだけ出ているようにできないだろうか? 本稿では、そのような「アプリバーヒント」を実装する方法を紹介する。なお、本稿のサンプルは「Windows Store app samples:MetroTips #103」からダウンロードできる。
ユニバーサルプロジェクトを使ってユニバーサルWindowsアプリを開発するには、以下の開発環境が必要である。本稿では、無償のVisual Studio Community 2013 with Update 4を使っている。
*1 SLAT対応ハードウェアは、Windows Phone 8.1エミュレーターの実行に必要だ。ただし未対応でも、ソースコードのビルドと実機でのデバッグは可能だ。SLAT対応のチェック方法はMSDNブログの「Windows Phone SDK 8.0 ダウンロードポイント と Second Level Address Translation (SLAT) 対応PCかどうかを判定する方法」を参照。なお、SLAT対応ハードウェアであっても、VM上ではエミュレーターが動作しないことがあるのでご注意願いたい。
*2 事前には「Windows 8.1 Update 1」と呼ばれていたアップデート。スタート画面の右上に検索ボタンが(環境によっては電源ボタンも)表示されるようになるので、適用済みかどうかは簡単に見分けられる。ちなみに公式呼称は「the Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2 update that is dated April, 2014」というようである。
*3 Windows Phone 8.1エミュレーターを使用しないのであれば、32bit版のWindows 8.1でもよい。
*4 マイクロソフトのダウンロードページから誰でも入手できる(このURLはUpdate 4のもの)。
*5 本稿に掲載したコードを試すだけなら、無償のExpressエディションやCommunityエディションで構わない。Visual Studio Express 2013 with Update 4 for Windows(製品版)はマイクロソフトのページから無償で入手できる。Expressエディションはターゲットプラットフォームごとに製品が分かれていて紛らわしいが、Windowsランタイムアプリの開発には「for Windows」を使う(「for Windows Desktop」はデスクトップで動作するアプリ用)。また、2014年11月12日(米国時間)に新しくリリースされたVisual Studio Community 2013 with Update 4(製品版)もマイクロソフトのページから無償で入手できる。Communityエディションは本稿執筆時点では英語版だけなので、同じ場所にあるVisual Studio 2013 Language Packの日本語版を追加インストールし、[オプション]ダイアログで言語を切り替える必要がある。
Visual Studio 2013 Update 2(Update 3/4も)では、残念なことにVB用のユニバーサルプロジェクトのテンプレートは含まれていない*6。そのため、本稿で紹介するVBのコードはユニバーサルプロジェクトではなく、PCL(ポータブルクラスライブラリ)を使ったプロジェクトのものである。
*6 VB用のユニバーサルプロジェクトは、2015年にリリースされるといわれているVisual Studio 2015(開発コード「Visual Studio 14」)からの提供となるようだ。「Visual Studio UserVoice」(英語)のリクエストに対する、2014年6月18日付けの「Visual Studio team (Product Team, Microsoft)」からの回答による。
Windows 8.1向けに開発したWindowsランタイムアプリでは、画面の上端/下端からのスワイプ(マウス操作では右クリック)で表示されるアプリバー(Windows.UI.Xaml.Controls名前空間のAppBarコントロール)を利用していることも多いだろう。ところが、2015年の夏に提供開始される予定のWindows 10にそのようなアプリをインストールすると、タッチでの操作が少々やりにくくなるのだ(次の画像)。
このようなタッチでの操作性低下を補う手段としては、前回で紹介したようなアプリバーを開くボタンを設置する方法もある。もう一つの方法として、「アプリバーヒント」*7がある。
*7 「[…]ボタン」などと表記した方が分かりやすいかもしれない。以降で紹介するように、Windows Phoneのアプリバーでは以前からそうなっており、特に呼び名はなかったように思う。海外では「AppBar Ellipsis」/「AppBar with Ellipsis」(省略記号付きのアプリバー)などとも呼ばれている。本稿執筆時点のMSDNでは「アプリバーヒント」(原文「App bar hint」)と紹介されている。
アプリバーヒントは、Windows Phoneのアプリバーには標準で備わっている(次の画像)。
Windows Phone 8.1で上のようにするには、次のコードのようにXAMLでプロパティを指定するだけだ。
<Page.BottomAppBar>
<CommandBar ClosedDisplayMode="Minimal" Background="DarkRed">
……省略……
</CommandBar>
</Page.BottomAppBar>
このClosedDisplayModeプロパティは、Windows 8.1には存在しない*8。しかし、Windows 8.1向けのWindowsランタイムアプリでも、アプリバーヒントを独自に実装しているものもある(次の画像)。
*8 ClosedDisplayModeプロパティは、Windows 10ではデバイス共通のAPIとして実装されるもようだ。MSDN参照(本稿執筆時点では英語のみ)。ちなみに、そこには「Hidden」が定義されているが、PC向けの互換性のためだと思われる(Windows Phone 8.1には存在しない)。
Windows 8.1では、細長いボタンとして実装すればよい。
画面下端の最前面に来るように、横幅一杯のボタンを配置する。[…]の表示には、コントロールテンプレートを使うとよいだろう。そして、ボタンのクリックイベントでアプリバーを開いてやればよいのである(次のコード)。なお、アプリバーを開いたときにボタンを隠したりする必要はない(アプリバーを透過させない場合)。アプリバーはさらに前面に表示されて、ボタンを隠してくれるのだ*9。
*9 アプリバーを透過させる(透明、あるいは半透明にする)場合は、ボタンが透けて見えてしまう。そのときは、アプリバーの開閉に合わせてボタンの表示/非表示を切り替えねばならない。具体的には、アプリバーのOpenedイベントでボタンを非表示にし、アプリバーのClosedイベントでボタンを表示すればよい。
……省略……
<Button Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"
Padding="0,0,0,0" Click="AppBarOpenButton_Click">
<Button.Template>
<ControlTemplate>
<Grid Background="DarkRed">
<TextBlock Text="..." FontSize="36" FontWeight="Bold" Foreground="White"
HorizontalAlignment="Right" Margin="0,-25,10,0"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Page>
private void AppBarOpenButton_Click(object sender, RoutedEventArgs e)
{
this.BottomAppBar.IsOpen = true;
}
Private Sub AppBarOpenButton_Click(sender As Object, e As RoutedEventArgs)
Me.BottomAppBar.IsOpen = True
End Sub
次に、アプリバーのコードである。前出のWindows Phoneの画像を再び見ていただきたいのだが、Windows Phoneでは開いたアプリバーにもアプリバーヒントが出ている。それをクリック/タップするとアプリバーが閉じるのだ。これも実装してみよう(次のコード)。
<Page
……省略……
>
<Page.BottomAppBar>
<CommandBar Background="DarkRed">
<CommandBar.PrimaryCommands>
<AppBarButton Icon="Edit" IsCompact="True" />
<AppBarButton Icon="Pin" IsCompact="True" />
<AppBarButton IsCompact="True" Click="AppBarCloseButton_Click"
VerticalAlignment="Stretch">
<AppBarButton.Template>
<ControlTemplate>
<TextBlock FontSize="36" FontWeight="Bold"
Margin="10,-20,10,0">...</TextBlock>
</ControlTemplate>
</AppBarButton.Template>
</AppBarButton>
</CommandBar.PrimaryCommands>
<CommandBar.SecondaryCommands>
<AppBarButton Icon="Home" Label="[Secondary Command 1]" />
<AppBarButton Icon="Help" Label="[Secondary Command 2]" />
</CommandBar.SecondaryCommands>
</CommandBar>
</Page.BottomAppBar>
……省略……
private void AppBarCloseButton_Click(object sender, RoutedEventArgs e)
{
this.BottomAppBar.IsOpen = false;
}
Private Sub AppBarCloseButton_Click(sender As Object, e As RoutedEventArgs)
Me.BottomAppBar.IsOpen = False
End Sub
以上のようにして作成したコードを、Windows 8.1上でVS 2013を使ってアプリパッケージにし、それをWindows 10 Build 10041に持ってきてインストールした。そして実行した結果が、次の画像である。なお、画像は掲載していないが、もちろんWindows 8.1でもちゃんと動作する。
Windows 8.1向けのWindowsランタイムアプリでアプリバーを利用している場合は、Windows 10で操作性が低下してしまうことへの対策を講じた方がよい。本稿では、アプリバーを開きやすくするアプリバーヒントを画面に追加する方法を紹介した。
Copyright© Digital Advantage Corp. All Rights Reserved.