RSSの読み込み表示とページ遷移時のパラメータの渡し方を知る
では、つぎにもう1つのサンプルを紹介します。
別のページに遷移する際のパラメータの渡し方
「名前」「住所」「仕事」の3つのデータを別ページに渡すサンプルです。
「名前」「住所」「仕事」を入力して〔OK〕ボタンをタップすると、これら3つの情報が別ページに表示されます(図6)。Windows ストアアプリでは、どんな型のデータでも、別ページに渡すことが可能です。別ページで受け取ったデータは、オブジェクト型になりますので、任意の型にキャストして使用することになります。
実際に動かした動画は下記のようになります。Windows Store Applicationの動画を撮るアプリケーションが存在していませんので、スマホでとった動画です。見難い点はご了承願います。
サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。
プロジェクトの作成
VS 2012のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]と選択します。次に、「テンプレート」から「Windows ストア」を選択し、右に表示される項目名から「新しいアプリケーション(XAML)」を選択します。「名前(N)」に任意のプロジェクト名を指定します。ここでは「Win8_NavigateParameter」という名前を付けています。
次に、ソリューションエクスプローラー内のWin8_NavigateParameterプロジェクトを選択した状態で、マウスの右クリックをし、表示されるメニューから「追加(D) /新しいフォルダ(D)」と選択して、名前がImageというフォルダを作成します。作成したImageフォルダを選択し、マウスの右クリックで表示されるメニューから「追加(D)/既存の項目(G)」と選択して1個の画像ファイル(1920×1200)を追加しておきます。
画像ファイルはダウンロードされたサンプルファイルには追加済です。
コントロールの配置
ツールボックスからデザイン画面上にImageコントロールを1個、TextBlockコントロール(項目名を表示)を3個、TextBoxコントロール(入力用)を3個、Buttonコントロールを2個、Frameコントロールを1個配置します。
ImageコントロールのSourceプロパティにはImageフォルダ内の画像を読み込んでおきます。レイアウトは図7のようになります。書き出されるXAMLコードはリスト5です。
リスト5 書き出されたXAMLコード(MainPage.xaml)
- (1)
要素のSourceにImageフォルダ内の画像を指定しています。 - (2)「名前」「住所」「仕事」用の入力ボックスである3つの
要素を配置しています。 - (3)〔OK〕と〔戻る〕ボタンを配置しています。〔戻る〕ボタンは初期状態では、IsEnabledプロパティのチェックを外し(False)使用不可としています。
- (4)要素を配置しています。
<Page x:Class="Win8_NavigateParameter.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Win8_NavigateParameter" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Image Source="Image/win8_10.jpg"/>■(1) <TextBlock HorizontalAlignment="Left" Height="67" Margin="148,57,0,0" TextWrapping="Wrap" Text="名前" VerticalAlignment="Top" Width="130" FontFamily="Meiryo UI" FontSize="48"/> <TextBlock HorizontalAlignment="Left" Height="67" Margin="148,155,0,0" TextWrapping="Wrap" Text="住所" VerticalAlignment="Top" Width="130" FontFamily="Meiryo UI" FontSize="48"/> <TextBlock HorizontalAlignment="Left" Height="67" Margin="148,250,0,0" TextWrapping="Wrap" Text="仕事" VerticalAlignment="Top" Width="130" FontFamily="Meiryo UI" FontSize="48"/> <TextBox x:Name="nameTextBox" HorizontalAlignment="Left" Height="67" Margin="313,57,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="408" FontFamily="Meiryo UI" FontSize="48"/>■(2) <TextBox x:Name="addressTextBox" HorizontalAlignment="Left" Height="67" Margin="313,155,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="853" FontFamily="Meiryo UI" FontSize="48"/>■(2) <TextBox x:Name="jobTextBox" HorizontalAlignment="Left" Height="67" Margin="313,250,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="408" FontFamily="Meiryo UI" FontSize="48"/>■(2) <Button x:Name="okButton" Content="OK" HorizontalAlignment="Left" Height="72" Margin="313,343,0,0" VerticalAlignment="Top" Width="363" FontFamily="Meiryo UI" FontSize="36"/>■(3) <Frame x:Name="myFrame" HorizontalAlignment="Left" Height="774" Margin="0,-6,0,0" VerticalAlignment="Top" Width="1225"/>■(4) <Button x:Name="backButton" Content="戻る" HorizontalAlignment="Left" Height="54" Margin="1248,23,0,0" VerticalAlignment="Top" Width="108" IsEnabled="False"/>■(3) </Grid> </Page>
「空白のページ」の作成
VS2012のメニューの「プロジェクト(P)/新しい項目の追加(W)」と選択します。「新しい項目の追加」ダイアログボックスが開きますので、「空白のページ」を選択します。「名前(N)」にGetParametersPage.xamlと入力し、[追加(A)]ボタンをクリックします。
コントロールの配置
表示されるデザイン画面に、ツールボックスからTextBlockコントロールを1個配置します。TextWrappingプロパティにはWrapを指定し、文字の回り込みを可能にしておきます(図8)。
書き出されるXAMLコードは省略します。
図8 TextBlockコントロールをレイアウトした(Parameter_08.png)
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト6のコードを記述します。
ロジックコードを記述する
リスト6 (MainWindow.xaml.vb)
Option Strict On
MessageDialogを表示するクラスの含まれる、Windows.UI.Popups名前空間をインポートします。
Imports Windows.UI.Popups
PersonalInfo構造体で、文字列型の「Namae」、「Address」、「Work」を定義しておきます。
Public Structure PersonalInfo Public Namae As String Public Address As String Public Work As String End Structure Public NotInheritable Class MainPage Inherits Page
PersonalInfo構造体のメンバ変数myPersonalInfoオブジェクトを宣言します。
Dim myPersonalInfo As PersonalInfo
〔OK〕ボタンがクリックされた時の処理
「名前」「住所」「仕事」のいずれかのデータが未入力の場合は、警告メッセージを表示して処理を抜けます。
それ以外の場合は、〔戻る〕ボタンの使用を可能にし、構造体のNameにnamaeTextBoxの値、AddressにaddressTextBoxの値、WorkにjobTextBoxの値を指定します。
FrameのNavigateメソッドでmyPersonalInfo構造体オブジェクトを引数に、GetParametersPageに遷移します。
Private Async Sub okButton_Click(sender As Object, e As RoutedEventArgs) Handles okButton.Click If nameTextBox.Text = String.Empty OrElse addressTextBox.Text = String.Empty OrElse jobTextBox.Text = String.Empty Then Dim message As New MessageDialog("データが未入力です。") Await message.ShowAsync Exit Sub Else backButton.IsEnabled = True myFrame.Visibility = Windows.UI.Xaml.Visibility.Visible myPersonalInfo.Namae = nameTextBox.Text myPersonalInfo.Address = addressTextBox.Text myPersonalInfo.Work = jobTextBox.Text myFrame.Navigate(GetType(GetParametersPage), myPersonalInfo) End If End Sub
〔戻る〕ボタンがクリックされた時の処理
Frameを非表示にします。
Private Sub backButton_Click(sender As Object, e As RoutedEventArgs) Handles backButton.Click myFrame.Visibility = Windows.UI.Xaml.Visibility.Collapsed End Sub End Class
次に、ソリューションエクスプローラー内のGetParametersPage.xamlを展開して表示される、GetParametersPage.xaml.vbをダブルクリックしてリスト7のコードを記述します。
ロジックコードを記述する
リスト7 (GetParametersPage.xaml.vb)
Option Strict On Public NotInheritable Class GetParametersPage Inherits Page
ページがアクティブになった時の処理
MainPage.xamlから渡された値(e.Parameter)をPersonalInfo構造体に変換して、PersonalInfo構造体型の変数myResultに格納します。
変数myNameに構造体のNamaeの値を、myAddressにAddressの値を、myJobにWorkの値を格納します。
TextBlock内に、各変数の値を文字列と連結して表示します。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) Dim myResult As PersonalInfo = DirectCast(e.Parameter, PersonalInfo) Dim myName = myResult.Namae Dim myAddress = myResult.Address Dim myJob = myResult.Work resultTextBlock.Text = "私の名前は" & myName & "で、住所は" & myAddress & "です。" & myJob & "の仕事をやっています。" End Sub End Class
今回はここまでです。ありがとうございました。
Windows ストアアプリでRSSを読み込み表示するサンプル
ページを遷移する際にパラメータを渡すサンプル