ピボットページを作成する(後編)
2011年7月29日(金)
ソリューションエクスプローラー内のPersonalInfoDetails.xamlを展開し、表示されるPersonalInfoDetails.xaml.vbをダブルクリックしてリスト5のロジックコードを記述します。
リスト5 個人情報の詳細データが表示される処理(PersonalInfoDetails.xaml.vb)
Option Strict On Imports System.Xml.Linq Partial Public Class PersonalInfoDetails Inherits PhoneApplicationPage ~コード略~ ReadXmldocクラスの新しいインスタンスmyReadXmldocオブジェクトをメンバ変数として宣言します。 Dim myReadXmldoc As New ReadXmldoc
画面の遷移で移動した時に最初に呼ばれるイベント
ここで、MainPage.xamlの、ListBox2より選択された時点で渡された文字データを受け取ります。文字データはNavigationContextのQueryStringにDictionary として提供されます。送信時のキーワード(この場合Index)を基に渡された文字列情報を、myParam(“Index”)として取得します。 myParam(“Index”)の値を数値に変換して、変数Indexに格納します。 変数namaeに、ReadXmldocクラスのインスタンスmyReadXmldocでpersonalInfo関数を呼び出し、Descendantsメソッドで、変数Indexに該当する<情報>要素の子要素<氏名>の値を格納します。同様に、変数ageには<年齢>要素の値を、変数addressには<住所>要素の値を、変数companyには<勤務先>要素の値を格納します。 取得した値をTextBlock1のTextプロパティに改行(ChrW(10))を追加して指定します。 Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs) Dim myParam As IDictionary(Of String, String) = NavigationContext.QueryString Dim Index As Integer = Integer.Parse(myParam("personalInfoIndex")) Dim namae As String = myReadXmldoc.personalInfo.Descendants("情報")(Index).<氏名>.Value Dim age As String = myReadXmldoc.personalInfo.Descendants("情報")(Index).<年齢>.Value Dim address As String = myReadXmldoc.personalInfo.Descendants("情報")(Index).<住所>.Value Dim company As String = myReadXmldoc.personalInfo.Descendants("情報")(Index).<勤務先>.Value TextBlock1.Text = "【氏 名】" & namae & ChrW(10) & "【年 齢】" & age & ChrW(10) & "【住 所】" & address & ChrW(10) & "【勤務先】" & company MyBase.OnNavigatedTo(e) End Sub
[Topに戻る]ボタンがクリックされた時の処理
MainPage.xamlの1ページ目に遷移します。 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative)) End Sub
エミュレーターの表示方向が変化するときに発生するイベント
エミュレーターが横向きになった時はTextBlockのWidthの値を広くとります。 Private Sub PersonalInfoDetails_OrientationChanged(sender As Object, e As Microsoft.Phone.Controls.OrientationChangedEventArgs) Handles MyBase.OrientationChanged TextBlock1.Width = Me.ActualWidth End Sub
エミュレーターのBack(←)ボタンのイベントを上書きする処理
エミュレーターの持っている本来のBack処理を、e.Cancel=Trueで無効とします。 NavigationService.NavigateメソッドでMainPage.xamlに遷移します。引数にPivotIndex=1を渡していますので、MainPage.xamlの2ページ目に遷移します。 このBackボタンのイベントを上書きする処理を記述していないと、エミュレーターのBack(←)をクリックした際エラーが発生しますので、注意してください。 Protected Overrides Subと入力すると、インテリセンス機能が働き、イベントの一覧が表示されますので、その中から選択してください。 Protected Overrides Sub OnBackKeyPress(ByVal e As System.ComponentModel.CancelEventArgs) e.Cancel = True NavigationService.Navigate(New Uri("/MainPage.xaml?PivotIndex=1", UriKind.Relative)) MyBase.OnBackKeyPress(e) End Sub End Class
ソリューションエクスプローラー内のmyFavoriteSite.xamlを展開し、表示されるmyFavoriteSite.xaml.vbをダブルクリックしてリスト6のロジックコードを記述します。
リスト6 お気に入りのサイトがブラウザに表示される処理(myFavoriteSite.xaml.vb)
Option Strict On Imports System.Xml.Linq Partial Public Class myFavoritSite Inherits PhoneApplicationPage ~コード略~ ReadXmldocクラスの新しいインスタンスmyReadXmldocオブジェクトをメンバ変数として宣言します。 Dim myReadXmldoc As New ReadXmldoc
[Topに戻る]ボタンがクリックされた時の処理
NavigationService.NavigateメソッドでMainPage.xamlの1ページ目に戻ります。 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click NavigationService.Navigate(New Uri("/MainPage.xaml", UriKind.Relative)) End Sub
ページが読み込まれた時の処理
ここで、MainPage.xamlの、ListBox3より選択された時点で渡された文字データを受け取ります。文字データはNavigationContextのQueryStringにDictionary として提供されます。送信時のキーワード(この場合siteIndex)を基に渡された文字列情報を、myParam(“siteIndex”)として取得します。 myParam(“siteIndex”)の値を数値に変換して、変数Indexに格納します。 変数siteNameに、ReadXmldocクラスのインスタンスmyReadXmldocでfavoriteSite関数を呼び出し、Descendantsメソッドで、変数Indexに該当する<サイト名>要素の値を格納します。同様に、変数siteUriには<サイト名>要素の属性”uri”の値を格納します。 x:NameがPageTitleというTextBlockのTextプロパティにsiteName変数の値を指定します。サイト名が表示されます。 WebBrowser1.NavigateメソッドにsiteUriを絶対URIで指定します。ブラウザ内に、指定したサイトが表示されます。サイト名にPROJECT KySSを指定した場合は、TOPページは表示されますが、リンクをクリックするとSilverlight Installのアイコンが表示されます。Windows Phone 7.1で作成した場合も同様です。Installのアイコンをクリックしても、エラーとなってインストールはされません。WebBrowserコントロールは、執筆現時点では、Flash、Silverlightのページには対応していません。 Private Sub myFavoritSite_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim myParam As IDictionary(Of String, String) = NavigationContext.QueryString Dim Index As Integer = Integer.Parse(myParam("siteIndex")) Dim siteName As String = myReadXmldoc.favoriteSite.Descendants("サイト名")(Index).Value Dim siteUri As String = myReadXmldoc.favoriteSite.Descendants("サイト名")(Index).Attribute("uri").Value PageTitle.Text = siteName WebBrowser1.Navigate(New Uri(siteUri, UriKind.Absolute)) End Sub
エミュレーターの表示方向が変化するときに発生するイベント
エミュレーターが横向きになった時はWebBrowserのWidthの値を広くとります。 Private Sub myFavoritSite_OrientationChanged(sender As Object, e As Microsoft.Phone.Controls.OrientationChangedEventArgs) Handles MyBase.OrientationChanged WebBrowser1.Width = Me.ActualWidth End Sub
エミュレーターのBack(←)ボタンのイベントを上書きする処理
エミュレーターの持っている本来のBack処理を、e.Cancel=Trueで無効とします。 NavigationService.NavigateメソッドでMainPage.xamlに遷移します。引数にPivotIndex=2を渡していますので、MainPage.xamlの3ページ目に遷移します。 このBackボタンのイベントを上書きする処理を記述していないと、エミュレーターのBack(←)をクリックした際エラーが発生しますので、注意してください。 Protected Overrides Subと入力すると、インテリセンス機能が働き、イベントの一覧が表示されますので、その中から選択してください。 Protected Overrides Sub OnBackKeyPress(ByVal e As System.ComponentModel.CancelEventArgs) e.Cancel = True NavigationService.Navigate(New Uri("/MainPage.xaml?PivotIndex=2", UriKind.Relative)) MyBase.OnBackKeyPress(e) End Sub End Class
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。