PR

Windows Phoneによるタイル通知の送受信

2011年9月16日(金)
PROJECT KySS

ASP.NETページの作成(TileNotification_NET)

VS2010のメニューから、「ファイル(F)/新規作成(N)/Webサイト(W)」と選択し、表示される画面から「ASP.NET Webサイト」を選択します。「webの場所(L)」に今回は「フォルダ名\TileNotification_NET」と指定し[OK]ボタンをクリックします。

ソリューションエクスプローラー内のDefault.aspxを展開して表示される、Default.aspx.vbにリスト2のコードを記述します。

ロジックコードを記述する

リスト2 (Default.aspx.vb)

Option Strict On
Imports System.IO
Partial Class _Default
  Inherits System.Web.UI.Page

ページが読み込まれた時の処理

サーバー上の物理パスを指定します。
StreamReaderクラスで、POSTされたデータ(Request.InputStream)を取得します。StreamReaderクラスは、特定のエンコーディングのバイトストリームを読み込むTextReader を実装するクラスです。
取得したデータの内容をReadToEndメソッドで読み取り、変数readStrに格納しておきます。
フォルダ名とファイル名(channerlUri.txt)を指定して、読み取ったデータをStreamWriterクラスのWriteメソッドで書き込みます。StreamWriterクラスは、文字を特定のエンコーディングでストリームに書き込むための TextWriterを実装するクラスです。
channerlUri.txtにWindows Phoneから送信されたチャネルURIが保存されます。この保存されたデータを、これ以降で作成するWPFのプログラムから読み込みます。
  Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Dim filePath As String = Server.MapPath("./")
    Dim reader As New StreamReader(Me.Request.InputStream(), System.Text.Encoding.UTF8)
    Dim readStr As String = reader.ReadToEnd
    Dim writer As StreamWriter = New StreamWriter(filePath & "SaveData/" & "channelUri.txt", False, System.Text.Encoding.UTF8)
    writer.Write(readStr)
    reader.Close()
    writer.Close()
    Response.Flush()
  End Sub
End Class

通知チャネルを取得してタイルのUI情報を送信するWPFプログラム

VS2010メニューから「ファイル(F)/新規作成(N)/プロジェクト(P) 」と選択し、「インストールされたテンプレート」から、「Windows」を選択します。右に表示されるパネルから「WPFアプリケーション」を選択します。「名前(N)」に「WPF_SendTileNotification」と指定し、[OK]ボタンをクリックします(図4)。

図4:WPFアプリケーションを選択する(クリックで拡大)

コントロールのレイアウト

まず、Windowのプロパティから[レイアウト]パネルにあるWidthに773、Heightに563と指定します。この値は自由に設定してください。

次に、ツールボックスからMainWindow.xamlのデザイン画面上に、TextBlockを4個、ListBoxを1個、TextBoxを3個、Buttonを1個配置します。各コントロールの配置とNameは図5を参照してください。

ソリューションエクスプローラー内の「WPF_SendTileNotification」の直下にImageというフォルダを作成して、PNG画像を追加しておきます。このPNG画像のプロパティの「ビルドアクション」はデフォルト(Resource)のままで構いません。

次にbin\Debug\フォルダ内にリスト3のXML文書ファイル(ImageInfo.xml)を配置しておきます。bin\Debug\フォルダは、ソリューションエクスプローラー内の「すべてのファイルを表示」アイコンをクリックすると表示されます。

ダウンロードしたファイルには、PNG画像やXML文書ファイルは追加済みです。

図5:各コントロールを配置した(クリックで拡大)

リスト3 XML文書ファイル(ImageInfo.xml)

<?xml version="1.0" encoding="utf-8" ?>
<画像>
  <画像名>cherry173_01.png</画像名>
  <画像名>cherry173_02.png</画像名>
  <画像名>cherry173_03.png</画像名>
</画像>

書き出されるXAMLをリスト4のように編集します。

MainWindow.xamlの編集

リスト4 (MainWindow.xaml)

(1)<Window.Resource>プロパティ要素内にListBoxTemplateというキー名の<DataTemplate>要素を配置します。その中に<StackPanel>要素を配置し、子要素として<Image>要素を配置します。WidthとHeightを指定し、Sourceプロパティに「画像名」をバインドします。この名称は、VBコードのクラス内で定義するプロパティ名です。Marginプロパティに10を指定し、余白を設けます。
(2)(1)で定義したListBoxTemplateをListBoxコントロールから参照します。
<Window x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="MainWindow" Height="563" Width="773">
  <Window.Resources> ■(1)
    <DataTemplate x:Key="ListBoxTemplate">
      <StackPanel>
        <Image Width="173" Height="173" Source="{Binding 画像名}" Margin="10"/> ■(1)
      </StackPanel>
    </DataTemplate>
  </Window.Resources>
  <Grid Height="527" Width="748">
    <ListBox Height="463" HorizontalAlignment="Left" Margin="22,42,0,0" Name="ListBox1" VerticalAlignment="Top" Width="234" ItemTemplate="{StaticResource ListBoxTemplate}"/> ■(2)
    <TextBlock Height="30" HorizontalAlignment="Left" Margin="50,12,0,0" Name="TextBlock1" Text="画像を選択" VerticalAlignment="Top" Width="130" FontSize="24" />
    <TextBlock Height="34" HorizontalAlignment="Left" Margin="296,323,0,0" Name="TextBlock2" Text="URI" VerticalAlignment="Top" Width="52" FontSize="24" Visibility="Collapsed" />
    <TextBlock FontSize="24" Height="34" HorizontalAlignment="Left" Margin="296,42,0,0" Name="TextBlock3" Text="Count" VerticalAlignment="Top" Width="79" />
    <TextBox Height="34" HorizontalAlignment="Left" Margin="477,42,0,0" Name="countTextBox" VerticalAlignment="Top" Width="100" FontSize="22" />
    <TextBlock FontSize="24" Height="34" HorizontalAlignment="Left" Margin="296,141,0,0" Name="TextBlock4" Text="Title" VerticalAlignment="Top" Width="79" />
    <TextBox Height="34" HorizontalAlignment="Left" Margin="477,141,0,0" Name="titleTextBox" VerticalAlignment="Top" Width="229" FontSize="20" />
    <Button Content="タイルに通知を送る" Height="41" HorizontalAlignment="Left" Margin="307,202,0,0" Name="Button1" VerticalAlignment="Top" Width="399" FontSize="24" />
    <TextBlock FontSize="24" Height="34" HorizontalAlignment="Left" Margin="296,90,0,0" Name="TextBlock5" Text="Back Content" VerticalAlignment="Top" Width="159" />
    <TextBox Height="34" HorizontalAlignment="Left" Margin="477,90,0,0" Name="backContentTextBox" VerticalAlignment="Top" Width="229" FontSize="20" />
  </Grid>
</Window>
  • 「Windows Phoneによるタイル通知の送受信」サンプルプログラム

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています