連載 :
Windows Phone Tips集ShareLinkTaskを使ったSNSでのリンク共有とHubTileのサンプル
2011年11月21日(月)

ロジックコードを記述する
リスト4 (MainPage.xaml.vb)
Option Strict On
Imports System.Xml.Linq
Imports System.Windows.Media.Imaging
Partial Public Class MainPage
Inherits PhoneApplicationPage
' コンストラクター
Public Sub New()
InitializeComponent()
End Sub
XElementクラス型のメンバ変数xmldocを宣言します。
Dim xmldoc As XElement
ページが読み込まれた時の処理
XElement.LoadメソッドでXML文書ファイル(Astrology.xml)を読み込みます。
HubTile型の新しいリストであるmyHubTileListオブジェクトを作成します。
Descendantsメソッドで、子孫要素である全ての <占い> 要素のコレクションに対して、各要素を変数 result に格納しながら、以下の処理を繰り返します。
HubTileの新しいインスタンスであるmyHubTileオブジェクトを生成します。
myHubTileオブジェクトの、SourceプロパティにImage/を連結した、<Source> 要素の値を指定します。
Titleプロパティには<Title> 要素の値を指定します。
Messageプロパティには、<Message> 要素の値を指定します。
HubTileをグループ化するGropuTagプロパティには「astorology」と指定します。
HubTileの各プロパティについては8月版Toolkitをインストールした
C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11\SilverlightForWindowsPhoneToolkit.chm
のドキュメントを参照してください(英語)。
Marginプロパティには10を指定して余白を設けます。Background(背景色)プロパティには「赤」、Foreground(文字色)プロパティには「青」を指定します。
これらのプロパティの設定されたmyHubTileオブジェクトをAddメソッドでmyHubTileListオブジェクトに追加します。ListBoxのItemsSourceプロパティにmyHubTileListオブジェクトを指定します。これで、ListBox内に2列でHubTileが表示され、ランダムにアニメーションが実行されます。
Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
xmldoc = XElement.Load("Astrology.xml")
Dim myHubTileList As New List(Of HubTile)
For Each result In From c In xmldoc.Descendants("占い") Select c
Dim myHubTile As New HubTile
With myHubTile
.Source = New BitmapImage(New Uri("Image/" & result.Element("Source").Value, UriKind.Relative))
.Title = result.Element("Title").Value
.Message = result.Element("Message").Value
.GroupTag = "astrology"
.Margin = New Thickness(10)
.Background = New SolidColorBrush(Colors.Red)
.Foreground = New SolidColorBrush(Colors.Blue)
End With
myHubTileList.Add(myHubTile)
Next
ListBox1.ItemsSource = myHubTileList
End Sub
ListBoxから任意のHubTileが選択された時の処理
ListBoxから選択されたHubTileのインデックスに該当する<占い>要素の子要素<Tile> の値を変数myTitleに格納します。
ListBoxから選択されたHubTileのインデックスに該当する<占い>要素の子要素<Message> の値を変数myMessageに格納します。
myTitleとmyMessageを引数にして、これから作成するAstorologyPage.xamlに遷移します。
Back(←)アイコンがクリックされた時に発生する例外処理のために、Try~Catch~End Tryステートメントを使用しています。
Private Sub ListBox1_SelectionChanged(sender As Object, e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListBox1.SelectionChanged
Try
Dim myTitle As String = xmldoc.Descendants("占い")(ListBox1.SelectedIndex).Element("Title").Value
Dim myMessage As String = xmldoc.Descendants("占い")(ListBox1.SelectedIndex).Element("Message").Value
NavigationService.Navigate(New Uri(String.Format("/AstrologyPage.xaml?title={0}&message={1}", myTitle, myMessage), UriKind.Relative))
Catch
Exit Sub
End Try
End Sub
End Class
「Windows Phone 縦向きのページ(AstorologyPage.xaml) 」の作成
「プロジェクト(P)/新しい項目の追加(W)」と選択して、「Windows Phone 縦向きのページ」を選択します。「名前(N)」には「AstorologyPage.xaml」と指定します(図6)。
| 図6:「Windows Phone 縦向きのページ」を選択する(クリックで拡大) |
AstrologyPage.xamlの編集とコントロールの追加
x:NameがPageTitleというTextBlockのTextプロパティを削除します。ここにはプログラムから星座名が表示されます。
ツールボックスからTextBlockコントロールを1個配置します。Fontsizeは24、ForegroundはGold、TextWrappingはWrapと指定します(図7)。
| 図7:TextBlockを配置した(クリックで拡大) |
日本語表示設定
「ShareLinkTaskを使ってSNSでリンクを共有する」を参照してください。
書き出されるXAMLコードは省略します。
AstrologyPage.xamlを展開して表示される、Astrology.xaml.vbをダブルクリックしてリスト5のコードを記述します。
ロジックコードを記述する
リスト5 (AstrologyPage.xaml.vb)
Option Strict On Partial Public Class AstrologyPage Inherits PhoneApplicationPage
Public Sub New()
InitializeComponent()
End Sub
画面の遷移で移動した時に最初に呼ばれるイベント
ここで、MainPage.xamlから渡された文字データを受け取ります。文字データはNavigationContextのQueryStringにDictionary として提供されます。送信時のキーワード(この場合title)を基に渡された文字列情報の値(myParam(“title”))を取得します。取得した値を、PageTitleという名前を持つTextBlockに表示します。
次に、myParam(“message”)の値をTextBlock1に表示します。
Protected Overrides Sub OnNavigatedTo(e As System.Windows.Navigation.NavigationEventArgs)
Dim myParam As IDictionary(Of String, String) = NavigationContext.QueryString
PageTitle.Text = myParam("title") & "の運勢"
TextBlock1.Text = myParam("message")
MyBase.OnNavigatedTo(e)
End Sub
End Class
以上でTips集は終わりですが、まだまだ紹介したいTipsがありますので、この後予定している第2弾でも続けて紹介していきたいと思います。
どうもありがとうございました。
「ShareLinkTaskを使ったSNSでのリンク共有」サンプルプログラム
「HubTileを使って星座占いを表示する」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。



