Metro StyleアプリケーションのタイルアップデートのXMLテンプレートを取得する - C#

Metroスタイルのアプリケーションでスタート画面のタイルにメッセージを表示する場合、XMLをコンテンツとして渡す必要があります。XMLのコンテンツはタイルの大きさやメッセージの表示レイアウトにより、フォーマットが異なります。この記事ではメッセージの種類ごとのXMLのテンプレートを取得するコードを紹介します。

UI

下図のUIを準備します。


Metroスタイルアプリではコントロールを配置しただけでは名前が未設定になっています。配置したTextBoxコントロールを選択し、プロパティウィンドウの上部の[名前]欄に"textBox1"を設定します。


同様にComboBoxにも"comboBox1"を設定します。

コード

UIの右側のボタン"ShowTemplate Wide01"のボタンのClickイベントに以下のコードを記述します。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
  XmlDocument xml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText01);
  textBox1.Text = xml.GetXml();
}

解説

TileUpdateManagerクラスのGetTemplateContentメソッドを呼び出しXMLのテンプレートを取得します。GetTemplateContentメソッドの引数には取得するテンプレートのTileTemplateTypeを与えます。GetTemplateContentメソッドの戻り値はXmlDocuemntクラスになります。XMLコンテンツは戻り値のXmlDocument内に設定されています。GetXmlメソッドを用いてXMLを取得します。

アプリケーションの実行

アプリケーションを実行します。下図の画面が表示されます。


右側の[ShowTemplate Wide01]ボタンを押すとテキストボックスにテンプレートが表示されます。(下図)

他のテンプレートの取得

先の例では、TileTemplateType.TileWideText01のテンプレートを取得しました。TileTemplateTypeで定義されているテンプレートの一覧を列挙して選択したテンプレートを取得するコードを記述します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace GetNotificationTemplate
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
          this.InitializeComponent();
        
          Array array = Enum.GetValues(typeof(TileTemplateType));
          foreach (TileTemplateType t in array)
          {
            comboBox1.Items.Add(t);
          }
        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
          XmlDocument xml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText01);
          textBox1.Text = xml.GetXml();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
          string str = comboBox1.SelectedItem.ToString();
          TileTemplateType ttt = (TileTemplateType)Enum.Parse(typeof(TileTemplateType), str);

          XmlDocument xml = TileUpdateManager.GetTemplateContent(ttt);
          textBox1.Text = xml.GetXml();
        }
    }
}

解説

コンストラクタの下記コードにて、TileTemplateTypeの値を列挙しコンボボックスの要素に追加します。
Array array = Enum.GetValues(typeof(TileTemplateType));
foreach (TileTemplateType t in array)
{
  comboBox1.Items.Add(t);
}

ボタンのクリックイベントです。コンボボックスで選択した要素のXMLテンプレートを取得しテキストボックスに表示します。
private void button2_Click(object sender, RoutedEventArgs e)
{
  string str = comboBox1.SelectedItem.ToString();
  TileTemplateType ttt = (TileTemplateType)Enum.Parse(typeof(TileTemplateType), str);

  XmlDocument xml = TileUpdateManager.GetTemplateContent(ttt);
  textBox1.Text = xml.GetXml();
}

アプリケーション実行結果

アプリケーションを実行します。コンボボックスを開くとTileTemplateTypeの値の一覧が表示されます。


コンボボックスでTileTemplateTypeの値を選択し右側の[Show Template]ボタンを押します。コンボボックスで選択したテンプレートのXMLがテキストボックスに表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2012-03-12
iPentec all rights reserverd.