LaunchersとChoosersを使ってみる
2011年8月1日(月)
ソリューションエクスプローラー内のMainPage.xamlを展開し、表示されるMainPage.xaml.vbをダブルクリックしてリスト3のロジックコードを記述します。
ロジックコードを記述する
リスト3(MainPage.xaml.vb)
Option Strict On ランチャーやチューザーに関するクラスの含まれる、Microsoft.Phone.Tasks名前空間をインポートします。 Imports Microsoft.Phone.Tasks Imports System.Windows.Media.Imaging Partial Public Class MainPage Inherits PhoneApplicationPage ~コード略~
[メールを送る]ボタンがクリックされた時の処理
新しいEmailComposeTaskのインスタンス、sendMailTaskオブジェクトを生成します。Toプロパティに「メールの送り先アドレス」、Subjectに「メールのサブジェクト」、Bodyに「メールの本文」、Ccに「メールをCCで送る相手のメールアドレス」を指定し、Showメソッドを実行します。 エミュレーター上ではAccountの設定ができていませんので、エラーとなります。 Private Sub mailSendButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles mailSendButton.Click Dim sendMailTask As New EmailComposeTask With sendMailTask .To = "test@test.com" .Subject = "メールを送るテスト" .Body = "Windows Phone 7からメールを送ります。" .Cc = "test2@test.com" End With sendMailTask.Show() End Sub
[MediaPlayer]ボタンをクリックした時の処理
新しいMediaPlayerLauncherのインスタンス、mediaTaskオブジェクトを生成します。 LocationプロパティにMediaLocationType.Installを指定します。これは、コンテンツとしてxapに動画ファイルが含まれている場合、つまりメディアファイルがアプリケーションのインストールディスクにある場合の動画を再生する方法です。分離ストレージにある場合は、MediaLocationType.Dataと指定します。 Controlsプロパティにはメディアプレイヤーに表示するコントロールを指定します。MediaPlaybackControls.Allと指定して、すべてのコントロールを表示させます。 Mediaプロパティには、メディアプレイヤーアプリケーションの再生メディアを指定します。ここでは、dougo320.wmvファイルを相対URIで指定しています。Showメソッドで実行します。 Private Sub mediaButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles mediaButton.Click Dim mediaTask As New MediaPlayerLauncher With mediaTask .Location = MediaLocationType.Install .Controls = MediaPlaybackControls.All .Media = New Uri("dougo320.wmv", UriKind.Relative) End With mediaTask.Show() End Sub
[電話をかける]ボタンがクリックされた時の処理
NavigationService.NavigateメソッドでSelectPhoneNumberPage.xamlに遷移します。 SelectPhoneNumberPage.xaml.vbについては後述。 Private Sub callPhoneButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles callPhoneButton.Click NavigationService.Navigate(New Uri("/SelectPhoneNumberPage.xaml", UriKind.Relative)) End Sub
[メールアドレスの追加]ボタンがクリックされた時の処理
新しいSaveEmailAddressTaskのインスタンス、saveMailTaskオブジェクトを生成し、Showメソッドで実行します。 Private Sub saveAddressButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles saveAddressButton.Click Dim saveMailTask As New SaveEmailAddressTask saveMailTask.Show() End Sub
[電話番号の追加]ボタンをクリックした時の処理
新しいSavePhoneNumberTaskのインスタンス、saveTelTaskオブジェクトを生成します。PhoneNumberプロパティを空にしておくと、phone numberの入力欄が空になっています。Showメソッドで実行します。 Private Sub saveTelButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles saveTelButton.Click Dim saveTelTask As New SavePhoneNumberTask saveTelTask.PhoneNumber = String.Empty saveTelTask.Show() End Sub
[Web検索]ボタンがクリックされた時の処理
新しいSearchTaskのインスタンス、searchTaskオブジェクトを生成します。SearchQueryプロパティには検索クエリーを指定します。この値を空にしておくと、検索の入力欄が空になって検索キー入力を受け付ける状態になっています。SearchQueryプロパティに直接”Silverlight”と指定しておくと、実行と同時にSilverlightに関する情報が表示されます。Showメソッドで実行します。 Private Sub searchButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles searchButton.Click Dim searchTask As New SearchTask searchTask.SearchQuery = String.Empty searchTask.Show() End Sub
[WebBrowser起動]ボタンをクリックした時の処理
新しいWebBrowserTaskのインスタンス、browserTaskオブジェクトを生成します。URLプロパティを空にしておくと、サイトアドレスの入力欄が空になっていますので、見たいサイトのアドレスを入力できます。Showメソッドで実行します。 Private Sub webBrowserButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles webBrowserButton.Click Dim browserTask As New WebBrowserTask browserTask.URL = String.Empty browserTask.Show() End Sub
[E-Mailアドレス帳]ボタンをクリックした時の処理
新しいEmailAddressChooserTaskのインスタンス、addressTaskオブジェクトを生成します。Showメソッドで実行します。 AddHandlerメソッドで、タスクが完了した時のCompletedイベントハンドラを追加します。Completedイベント内では、完了イベントがTaskResult.OKで、正常に完了した場合には、メールアドレスをメッセージボックスで表示させます。 Private Sub addressButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles addressButton.Click Dim addressTask As New EmailAddressChooserTask AddHandler addressTask.Completed, Sub(addressSender As Object, addressArgs As EmailResult) If addressArgs.TaskResult = TaskResult.OK Then MessageBox.Show(addressArgs.Email) End If End Sub addressTask.Show() End Sub
[電話番号選択]ボタンがクリックされた時の処理
新しいPhoneNumberChooserTaskのインスタンス、telTaskオブジェクトを生成します。Showメソッドで実行します。 AddHandlerメソッドで、タスクが完了した時のCompletedイベントハンドラを追加します。Completedイベント内では、完了イベントがTaskResult.OKで、正常に完了した場合には、電話番号をメッセージボックスで表示させます。 Private Sub telButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles telButton.Click Dim telTask As New PhoneNumberChooserTask AddHandler telTask.Completed, Sub(phoneSender As Object, phoneArgs As PhoneNumberResult) If phoneArgs.TaskResult = TaskResult.OK Then MessageBox.Show(phoneArgs.PhoneNumber) End If End Sub telTask.Show() End Sub
[画像選択]ボタンがクリックされた時の処理
新しいPhotoChooserTaskのインスタンス、photoTaskオブジェクトを生成します。Showメソッドで実行します。 AddHandlerメソッドで、タスクが完了した時のCompletedイベントハンドラを追加します。Completedイベント内では、完了イベントがTaskResult.OKで、正常に完了した場合は以下の処理を行います。 Chooser での選択の結果は引数で渡されますので、渡された画像を BitmapImage オブジェクトに格納します。新しいImage のインスタンスmyImageオブジェクトを生成し、SourceプロパティにBitmapImage オブジェクトに格納した値を指定します。ContentPanelという名前のGridコントロールにmyImageオブジェクトを追加します。これでメニュー画面に選択した画像が表示されます。 表示された画像の上でマウスの左ボタンが押下された時の処理を行います。myImageSenderオブジェクトに格納されているImageコントロールの情報を取得し、SourceプロパティにNothingを指定します。これで、画像がクリックされるとメニュー画面から消えます。 Private Sub photoButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles photoButton.Click Dim photoTask As New PhotoChooserTask AddHandler photoTask.Completed, Sub(photoSender As Object, photoArgs As PhotoResult) If photoArgs.TaskResult = TaskResult.OK Then Dim bmp As New BitmapImage bmp.SetSource(photoArgs.ChosenPhoto) Dim myImage As New Image myImage.Source = bmp ContentPanel.Children.Add(myImage) AddHandler myImage.MouseLeftButtonDown, Sub(myImageSender As Object, myImageArgs As MouseButtonEventArgs) Dim selectImage As Image = DirectCast(myImageSender, Image) selectImage.Source = Nothing End Sub End If End Sub photoTask.Show() End Sub End Class
ソリューションエクスプローラー内のSelectPhoneNumberPage.xamlを展開し、表示されるSelectPhoneNumberPage.xaml.vbをダブルクリックしてリスト4のロジックコードを記述します。
リスト4 (SelectPhoneNumberPage.xaml.vb)
ここの処理は図1のメニューから[電話をかける]ボタンがクリックされ、SelectPhoneNumberPage.xamlページに遷移した時の処理になります。 Option Strict On Imports System.Xml.Linq Imports Microsoft.Phone.Tasks Partial Public Class SelectPhoneNumberPage Inherits PhoneApplicationPage ~コード略~ Dim xmldoc As XElement
ページが読み込まれた時の処理
XElement.LoadメソッドでXML文書ファイル(PhoneGuidance.xml)を読み込みます。 文字列型の新しいリストであるphoneListオブジェクトを宣言します。 <電話番号>要素のコレクションに対して、各要素を変数 result に格納しながら以下の処理を繰り返します。 文字列型のリストであるphoneListオブジェクトにAddメソッドで、<電話番号>要素の属性”title”の値を追加していきます。 ListBoxのItemsSourceプロパティにphoneListオブジェクトを指定します。これで、電話案内のメニュー一覧が表示されます。 Private Sub SelectPhoneNumberPage_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded xmldoc = XElement.Load("PhoneGuidance.xml") Dim phoneList As New List(Of String) For Each result In From c In xmldoc.Descendants("電話番号") Select c phoneList.Add(result.Attribute("title").Value) Next ListBox1.ItemsSource = phoneList End Sub
任意の電話案内のメニューが選択された時の処理
新しいPhoneCallTaskのインスタンス、phoneTaskオブジェクトを生成します。 変数phoneNumberに、選択されたListBoxの項目のインデックスに該当する、<電話番号>要素の値を格納します。 phoneTaskオブジェクトのDisplayプロパティに、選択された項目名と電話番号を連結して指定します。 PhoneNumberプロパティには変数phoneNumberに格納されている電話番号を指定します。 Showメソッドでタスクを実行します。 Private Sub ListBox1_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListBox1.SelectionChanged Dim phoneTask As New PhoneCallTask Dim phoneNumber As String = xmldoc.Descendants("電話番号")(ListBox1.SelectedIndex).Value With phoneTask .DisplayName = ListBox1.SelectedItem.ToString & ":" & phoneNumber & "に電話します。" .PhoneNumber = phoneNumber .Show() End With End Sub End Class
「LaunchersとChoosersを使ってみる」サンプルプログラム
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。