タイトルバーに文字列を表示するには?(Windows 8.1 Update対応)[Windows 8.1ストアアプリ開発]WinRT/Metro TIPS

Windows 8.1 Updateでは、マウスカーソルをWindowsストアアプリ画面の上端に持っていくとタイトルバーが表示される。ここに独自の文字列を表示する方法を解説する。

» 2014年04月10日 16時10分 公開
WinRT/Metro TIPS
業務アプリInsider/Insider.NET

powered by Insider.NET

「WinRT/Metro TIPS」のインデックス

連載目次

 米国時間で4月2〜4日に開催された「Build 2014」で発表され(ちなみに日本版の「de:code」は5月29〜30日)、今週一般公開されたWindows 8.1(以降、Win 8.1)のUpdateを適用すると、Windowsストアアプリの実行中にマウスカーソルを画面の上端に持っていったときにタイトルバーが表示されるようになる。このタイトルバーに、Webページのタイトルや表示しているファイル名などの独自の文字列を表示するアプリがある。これはどうやっているのだろうか? 本稿では、その方法を解説する。なお、本稿のサンプルは「Windows Store app samples:MetroTips #70」からダウンロードできる。

事前準備

 Win 8.1用のWindowsストアアプリを開発するには、Win 8.1とVisual Studio 2013(以降、VS 2013)が必要である。本稿ではOracle VM VirtualBox上で64bit版Windows 8.1 Pro(日本語版)とVisual Studio Express 2013 for Windows(日本語版)*1を使用している。なお、サンプルコードの開発はUpdateを適用していない環境で行い、動作の確認はUpdateを適用した環境で行った*2

*1 マイクロソフト公式サイトの「Microsoft Visual Studio Express 2013 for Windows」から無償で入手できる。

*2 Win 8.1のUpdateは、MSDN会員向けには一般公開に先立って4月3日(日本時間)に公開された。本稿で確認に使用しているのはこれである。


タイトルバーに文字列を表示するアプリ

 先日公開されたWin 8.1のUpdate(以降、Update 1)を適用すると、Windowsストアアプリの実行中にマウスカーソルを画面の上端に持っていったときに、Windowsストアアプリの上にかぶさるようにしてタイトルバーが表示される。そのタイトルバーにはアプリ名が表示されているのだが、それ以外に独自の文字列を付け加えるアプリもある。そのようなアプリとして、Internet Explorerや「リーダー」アプリなどがある。例えば、Internet Explorerでは次の画像のようなタイトルバーが表示される。

Internet Explorerのタイトルバー(Update 1)
Internet Explorerのタイトルバー(Update 1) Internet Explorerのタイトルバー(Update 1)
マウスカーソルを画面の上端に持っていったときだけ、タイトルバーが表示される(上の画像の赤枠内)。
タイトルバーの左端にあるアイコンをクリックすると、[閉じる]や[最小化]といったウィンドウを操作するメニューが表示される。右端には、ウィンドウを閉じるボタンと最小化するボタンがある(最小化ボタンは、実行中のWindowsストアアプリをタスクバーに表示するように設定している場合のみ)。中央部分には、どのアプリでもその名前が表示される(これは変更できない)。加えて、一部のアプリでは任意の文字列も追加して表示する。
なお、このタイトルバーはWindowsストアアプリの上にかぶさるように表示される(その点ではアプリバーに似ている)。Windowsストアアプリの画面の高さがタイトルバーの分だけ削られるわけではないのだ。マウスカーソルを外せばタイトルバーは消える。また、タイトルバーが出た状態でも、これまでのように画面の上端をマウスで「つかんで」下端までドラッグして画面を閉じるという操作が可能だ。
下の図は、タイトルバーの中央付近を拡大したものだ。Internet Explorerの場合は、表示しているWebページのタイトルがアプリ名の前に付いている。

 上の画像では、表示しているWebページのタイトルがタイトルバーの文字列に使われている。このような表示をする方法を、次で説明する。

タイトルバーに文字列を表示するには?

 ApplicationViewクラス(Windows.UI.ViewManagement名前空間)のTitleプロパティに文字列を設定すればよい。

 例えば、テキストボックス(名前は「TextBox1」とする)に入力されている文字列を、ボタンをタップしたときにタイトルバーに設定するには、次のコードのようにする。

private void Button_Click(object sender, RoutedEventArgs e)
{
  string titleText = TextBox1.Text;

  Windows.UI.ViewManagement.ApplicationView appView
    = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView();
  appView.Title = titleText;
}

Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
  Dim titleText As String = TextBox1.Text

  Dim appView As Windows.UI.ViewManagement.ApplicationView _
    = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView()
  appView.Title = titleText
End Sub

タイトルバーに文字列を設定するコード(上:C#、下:VB)
このコードは、Update 1の適用/未適用にかかわらず、Win 8.1で動作する。
ApplicationViewクラスのGetForCurrentViewメソッドを使うと、現在の画面表示に使われているApplicationViewオブジェクトが取得できる。あとは、そのTitleプロパティに文字列をセットするだけだ。
なお、ApplicationViewクラスはWindows 8.0のときから存在するのだが、このGetForCurrentViewメソッドとTitleプロパティはWin 8.1で新設されたものだ。

 適当なUIと組み合わせてビルドし、実行してみてほしい。「事前準備」の項で述べたように、このコードはUpdate 1を当てていない環境でも動作する

実行結果

 Update 1を当てた環境では、テキストボックスに文字列を入力してボタンをタップしてからタイトルバーを出すと、次の画像のように入力した文字列がタイトルバーに表示される。

タイトルバーに文字列が表示できた(Update 1) タイトルバーに文字列が表示できた(Update 1)
2つのアプリを同時に実行している。画面の左側はC#版、右側はVB版である。左側のウィンドウでタイトルバーを出したところ。テキストボックスの文字列がタイトルバーに表示されている(赤枠内。なお、タイトルバー周囲の黄色枠は後述するInspectツールによるもの)。
タイトルバーは、どれか1つのウィンドウだけに出る(別のウィンドウでタイトルバーを出すと、元のウィンドウに出ていたタイトルバーは消える)。
また、下半分に表示されているウィンドウは、前回で紹介したInspectツールである。これでタイトルバーを調べてみると、Windowsストアアプリとは別のウィンドウになっていて、しかもFrameworkIdは「"Win32"」(=ネイティブアプリ)であることから、タイトルバーはWindowsストアアプリとは別にシステムによって表示されていると推定できる。

 また、タスクバーのアイコンにマウスカーソルを持っていったときに表示されるプレビューにも、タイトルと同じ文字列が表示される(次の画像)。

タスクバーのプレビューにも表示される(Update 1) タスクバーのプレビューにも表示される(Update 1)

 では、Update 1を当てていない環境では意味がないかというと、そうではない。ちょっと気付きにくいかもしれないが、タスク切り替え時のプレビューにタイトルと同じ文字列が表示されるのだ(次の画像)。

タスク切り替え時のプレビューにも表示される(Win 8.1/Update 1とも)
タスク切り替え時のプレビューにも表示される(Win 8.1/Update 1とも) タスク切り替え時のプレビューにも表示される(Win 8.1/Update 1とも)
左端から出したタスク切り替えウィンドウ(上)にも、[Alt]+[Tab]キー(または[Control]+[Alt]+[Tab]キー)で出したタスク切り替えウィンドウ(下)にも、タイトルバーと同じ文字列が表示されている(赤枠内)。
ちなみに、Windowsストアアプリにおいて「閉じる(close)」(=上端から下端までスライドする、タイトルバーの[閉じる]ボタンをクリックするなど)というのは、アプリの実行を中断(suspend)した上でこれらタスク切り替えウィンドウから外す(=表示しない)ことである。「終了させる(terminate)」(=上端から下端までスライドさせアプリ画面が裏返るまで待機する、[Alt]+[F4]キーなど)とは意味が異なるのでご注意願いたい。

まとめ

 Win 8.1のUpdateで出るようになったタイトルバーには、簡単に任意の文字列を表示できる。また、Update前でも、タスク切り替えのプレビューには同じ文字列が表示される。あなたのアプリにも、現在のコンテンツを表す文字列をタイトルバーに出してみてはいかがだろうか。

Windows 8.1を扱う大規模カンファレンスのご紹介

 5月29日(木)〜5月30日(金)、マイクロソフトの最新技術情報(例えば本稿で解説したような内容)を日本語で日本人向けに提供するカンファレンス「de:code」が日本マイクロソフト主催で開催される。このカンファレンスは、米国時間で4月2〜4日に開催された「Build 2014」の内容をベースに、さらに日本向けのプラスアルファを含めたものになる。詳しい内容は(セッション内容は開催日までに決定していくとのこと)、リンク先を参照されたい。


「WinRT/Metro TIPS」のインデックス

WinRT/Metro TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。