8]スタート画面に表示されるアプリのタイルは、そのアプリにより増やせる。アプリで2つ目以降のタイルは「セカンダリ・タイル」と呼ばれる。その作成方法を説明する。Insider.NET連載目次スタート画面に表示されるアプリのタイルは、そのアプリにより増やすことができる。アプリで2つ目以降のタイルを「セカンダリ・タイル」と呼ぶ。セカンダリ・タイルからアプリの特定のページや検索結果などが直接開くようなプログラムを作ることが可能だ。エンド・ユーザー(以降、ユーザー)は「スタート画面にピン留めする*1」コマンドで、この機能を利用できる。本稿では、そのようなセカンダリ・タイルを活用する方法を説明する。#23」からダウンロードできる。日本語のアプリでは「スタート画面にピン留めする」/「スタート画面からピン留めを外す」が推奨されているが、そのような長い文字列をコマンド・ボタンの下に表示すると改行されてしまうため、「ピン留めする」/「ピン留め解除」などと略記しているアプリもある。2012)が必要である。これらを準備するには、第1回のTIPSを参考にしてほしい。●セカンダリ・タイルを作成するには?SecondaryTileクラス(Windows.UI.StartScreen名前空間)のオブジェクトを作り、ユーザーにピン留めの許可を求めるリクエストを発行すればよい。SecondaryTileクラスをインスタンス化し、必要なパラメータをセットする。次に挙げるのは必須のパラメータ(厳密にはSecondaryTileクラスのプロパティ)だ。【必須のパラメータ】TileId:セカンダリ・タイルに付ける一意のIDShortName:セカンダリ・タイルに表示する短い名前DisplayName:表示名Arguments:引数文字列(セカンダリ・タイルからの起動時にアプリに渡される)Logo:正方形タイル画像のURIそうしたらSecondaryTileクラスのRequestCreateForSelectionAsyncメソッドを呼び出す。コードとしてはこれだけである(次のコード)。【必須】タイルを識別するID。【必須】タイルを識別するID。【必須】タイルに表示される短い名前。【必須】アプリの長い名前。【必須】起動時に渡される引数。Functionセカンダリ・タイルを作成するメソッド(上:C#、下:VB)このメソッドのRect型の引数「buttonArea」には、タップされたコマンド・ボタンの場所を渡す(場所を取得するコードは後述)。メソッドを呼び出すと、コマンド・ボタンのすぐ上に次の画像のようなポップアップが表示される。セカンダリ・タイルの作成許可をユーザーに求めるポップアップコードで指定したワイド・ロゴと短い名前が表示されている。ここでユーザーが[スタート画面にピン留めする]をタップすると、実際にセカンダリ・タイルが作成され、RequestCreateForSelectionAsyncメソッドの戻り値はtrueになる。タップしなければ、セカンダリ・タイルは作成されず、メソッドはfalseを返す。ユーザーはこのポップアップで、タイルに表示される短い名前を自由に変更できる。●セカンダリ・タイルを削除するには?ユーザーはスタート画面でいつでもセカンダリ・タイルを削除できる。コードから削除するには、ユーザーにピン留め解除の許可を求めるリクエストを発行すればよい。それは次のようなメソッドになる。削除対象のセカンダリ・タイルを識別するためにTileIdを使う。Functionセカンダリ・タイルを削除するメソッド(上:C#、下:VB)メソッドの引数には、前と同様にタップされたコマンド・ボタンの場所を渡す。メソッドを呼び出すと、画面には次の画像のようなポップアップが表示される。セカンダリ・タイルの削除許可をユーザーに求めるポップアップここでユーザーが「スタート画面からピン留めを外す」をタップすると、実際にセカンダリ・タイルが削除されメソッドの戻り値はtrueになる。なければ、削除されず戻り値はfalseになる。存在しないTileIdを使ってRequestDeleteForSelectionAsyncメソッドを呼び出してもエラーにはならず、ポップアップも表示されることなく直ちにfalseが返ってくる。●「スタート画面にピン留め」コマンドを実装するには?アプリ・バーのコマンド・ボタンで上記のメソッドを呼び出すようにすればよい。リスト」によると、アプリ・バーに「スタート画面にピン留め」コマンドとして実装するように要請されている。セカンダリ・タイル表示中には、同じボタンが「スタート画面からピン留めを外す」に変わるようにしなければならない。コマンド・ボタンを切り替える方法はいくつかあるが、ここでは2つ配置しておいて片方を隠すようにしてみよう。2012のXAMLデザイナでアプリ・バーとコマンド・ボタンをデザインする。/>コマンド・ボタン部分のコードの抜粋(XAML)なお、コマンド・ボタンに適用した2つのスタイル(=「PinAppBarButtonStyle」と「UnPinAppBarButtonStyle」)は、「StandardStyles.xaml」ファイルにコメントとして記述されているので、コメントを外して使う。次に、コマンド・ボタンの表示を切り替えるメソッドを記述する。Subコマンド・ボタンの表示を切り替えるメソッド(上:C#、下:VB)画面が表示されたときに、このメソッドを呼び出して片方のボタンを隠す。ページのLoadStateメソッドに次のコードを追加する。ToggleAppBarButton(IsPinned("Test"));ToggleAppBarButton(IsPinned("Test"))画面表示時にコマンド・ボタンの表示を設定するコード(上:C#、下:VB)LoadStateメソッドに追加する。IsPinnedメソッドは次項で説明する。最後に、コマンド・ボタンがタップされたときのイベント・ハンドラを実装する(次のコード)。Subセカンダリ・タイルを作成するイベント・ハンドラ(上:C#、下:VB)コード中のGetElementRectメソッドは後述する。Subセカンダリ・タイルを削除するイベント・ハンドラ(上:C#、下:VB)コード中のGetElementRectメソッドは次に示してある。Functionボタンの場所を取得するGetElementRectメソッド(上:C#、下:VB)引数に渡されたUIオブジェクトの輪郭を包む矩形を取得して返している。上記のコードでは、実際にセカンダリ・タイルが作成/削除できたかどうかの結果を使って、コマンド・ボタンの表示を再設定している。ユーザーに問い合わせるポップアップが出ている間にアプリ・バーが閉じてしまわないように、アプリ・バーのIsStickyプロパティをコントロールしている。●現在のページが「ピン留め」されているかどうかを調べるには?TileIdを使って調べればよい。現在のページをこれから「ピン留め」するとしたらどんなTileIdになるかは算出できるはずだ。それと同じTileIdを持ったセカンダリ・タイルがすでに存在するかどうかは、次のコードで調べることができる。Function指定したセカンダリ・タイルの存在を調べるメソッド(上:C#、下:VB)このメソッドは、前述した「画面表示時にコマンド・ボタンの表示を設定するコード」で使っている。●セカンダリ・タイルからの起動時に特定の処理を行うには?起動時に、セカンダリ・タイル作成時に設定したTileIdとArgumentsが渡されるので、それに応じた処理を記述すればよい。セカンダリ・タイルから起動された場合、AppクラスのOnLaunchedメソッドに渡されるLaunchActivatedEventArgs型の引数「args」のプロパティに、セカンダリ・タイルの情報が入っている(次の2つ)。args.TileId(String型)args.Arguments(String型)セカンダリ・タイルから起動された場合は、これら2つともに有効な文字列が入ってくる。既定のタイルから起動されたときには、Argumentsがnull(VBではNothing)になっているので区別ができる(TileIdには既定値があって、nullにならない)。参考までに、起動時に受け取ったargs.TileIdとargs.Argumentsを画面に表示させてみると、次の画像のようになる。実行結果(画面の一部)上は、既定のタイルから起動した場合で、Argumentsはnull/Nothingになっている。下は、セカンダリ・タイルから起動した場合で、前述のコードで設定した値が入っている。●まとめセカンダリ・タイルを作成/削除するコードはそれほど難しくない。ユーザーの許可を受けずに作成/削除できない点には注意が必要かもしれない。本稿では触れなかったが、セカンダリ・タイルもライブ・タイルにできる。難しいのは、TileIdの生成の仕方やArgumentsに設定する文字列の決め方だ。この2つだけで起動時の画面遷移と遷移先での処理をコントロールしなければならないのだから、十分な設計が必要になるだろう。詳しくは、次のドキュメントを参考にしてほしい。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。