酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Phoneでホーム画面へセカンダリタイルを追加する

ホーム画面に表示されているタイル。Windows Phone 7の特徴的なUIのひとつです。このタイルは基本的に1アプリケーションで1つのタイルしかありません。

Windows Phone OS 7.1でアプリケーションから、更にホーム画面にタイルを追加する機能が追加になりました。

f:id:ch3cooh393:20150204013824p:plain

準備

シミュレータ上だけの問題かもしれませんが、同名のタイルを複数作ることが出来ません。なのでTextBoxに入力したテキストでタイルを作成しましょう。

MainPage.xaml.cs

セカンダリ・タイルを追加する側です。StandardTileDataインスタンスへタイルの背景となる画像ファイルとタイルに表示されるタイトルを設定します。

セカンダリタイルがタップされると、SubPage.xamlへ遷移するようにしたいので、UriインスタンスにはSubPage.xamlのURIを設定します。fromパラメータを取る事で、SubPage.xaml側でどのセカンダリ・タイルがタップされたのかを知ることが出来ます。

実際にアプリを作成するときは、IDなどユニークなものを設定するようにすると良いかもしれません。

private void addButton_Click(object sender, RoutedEventArgs e)
{
    // タイルにて表示する内容をStandardTileDataへ設定する
    var data = new Microsoft.Phone.Shell.StandardTileData()
    {
        BackgroundImage = new Uri("/ApplicationIcon.jpg", UriKind.Relative),
        Title = textBox1.Text
    };

    // セカンダリタイルがタップされた時に遷移するUri(同一アプリ内からのみ可能)
    var naviUrl = new Uri(string.Format("/SubPage.xaml?from={0}", textBox1.Text), UriKind.Relative);

    // タイルを追加する
    Microsoft.Phone.Shell.ShellTile.Create(naviUrl, data);
}

先ほども書きましたが、気をつけないといけない点としては、同じ名前のタイルを追加しようとすると、例外が発生してしまうということです。気をつけましょう。

f:id:ch3cooh393:20150204013948p:plain

SubPage.xaml.cs

ホーム画面に表示されたセカンダリ・タイルをタップすると、ShellTile.Createメソッドで渡したパラメータで呼び出されます。どのタイルからの呼び出しかを判別する為に、fromパラメータを取得して、TextBlockへ表示する様にしています。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    // 遷移時のパラメータにfromが含まれているか確認する
    if (NavigationContext.QueryString.Keys.Contains("from"))
    {
        // 含まれていればテキストブロックで表示する
        textBlock.Text = NavigationContext.QueryString["from"];
    }
}

さぁ、動かしてみよう

テキストボックスに「dog」と入力してAddボタンをタップします。問題なくセカンダリ・タイルが作成されると、一旦アプリを抜けてホーム画面へ遷移します。

f:id:ch3cooh393:20150204014141p:plain

ホーム画面にdogタイルが追加されていることが確認できます。dogタイルをタップすると、「from dog」と表示されています。セカンダリ・タイルとタイトルが一致しているので、正しくパラメータが渡せたことが判りました。

f:id:ch3cooh393:20150204014149p:plain