ピボットページを作成する(後編)[3ページ目]

ソリューションエクスプローラー内の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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30