このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開

方法: Windows Phone 用のアラームと通知を作成する

2012/02/09

ScheduledNotification を継承する Alarm クラスと Reminder クラス、および ScheduledActionService クラスを使用して、スケジュールされた通知を作成し、システムに登録します。アラームおよびリマインダーは、未来の指定した時刻に起動するようにスケジュールされ、定期的なスケジュールで起動するように構成することもできます。リマインダーが起動すると、アプリケーションで指定したタイトルと追加のテキスト コンテンツを示すダイアログが表示されます。ユーザーがリマインダーの UI をタップすると、アプリケーションが起動し、指定したページに移動します。クエリ文字列パラメーターを使用して、アプリケーションが起動したときに、アプリケーションに情報を渡すことができます。アラームが起動すると、常に "アラーム" というタイトルが、指定した追加のテキスト コンテンツと共に表示されます。アラームには、起動時に再生されるカスタム サウンド ファイルを指定することもできます。ユーザーがアラームの UI をタップすると、アラームを作成したアプリケーションが起動し、アプリケーションの初期ページが表示されます。

このトピックでは、アラームおよびリマインダーを使用するアプリケーションの作成を順を追って説明します。この 2 つの種類のスケジュールされた通知の使用方法はよく似ています。この例のコードで、アラームとリマインダーで異なる点はごく一部のみです。以下の手順では、3 つのアプリケーション ページを実装します。

  1. スケジュールされた通知の一覧を表示するページの作成。このページには、アプリケーションで作成および登録されたすべてのアラームとリマインダーの一覧が表示されます。このページでは、一覧から通知を削除することもできます。

  2. スケジュールされた通知を追加するページの作成。このページでは、Silverlight コントロールを使用して、ユーザーが新しいアラームおよびリマインダーを作成できる入力フォームを作成します。

  3. リマインダーにより起動されるページの作成。このページは、ユーザーがリマインダー ダイアログをタップした結果としてアプリケーションが起動した場合に、アプリケーションが移動するページです。このページには、クエリ文字列でページに渡されたデータが表示されます。この機能は、リマインダーにのみ適用されます。アラームは常にアプリケーションの初期ページを起動し、クエリ文字列パラメーターを渡しません。

この例で作成する最初のページは、アプリケーションに登録されているすべてのアラームとリマインダーの一覧を表示するページです。この例では、スケジュールされた通知の一覧を格納する IEnumerable オブジェクトにデータバインドされた ListBox コントロールを使用します。ただし、説明を簡単にするために、この例では完全な Model-View-ViewModel フレームワークは実装しません。このよく使用される Silverlight アプリケーションのパターンの詳細については、「Windows Phone アプリケーションでの Model-View-ViewModel パターンの実装」を参照してください。

リマインダーの一覧ページを作成するには

  1. Visual Studio で、新しい Windows Phone アプリケーション プロジェクトを作成します。このテンプレートは、Silverlight for Windows Phone カテゴリにあります。

  2. リマインダーの一覧ページを作成する最初の手順は、XAML でユーザー インターフェイスを作成することです。見た目のよい UI を作成するのに必要な XAML コードは膨大になる可能性があるので、最初に XAML コードを示した後、重要な要素について取り上げます。Silverlight コントロールの使用の詳細については、「Windows Phone のコントロール」を参照してください。

    プロジェクトの MainPage.xaml ファイルに次のコードを貼り付けます。コードは "ContentPanel" という名前の Grid 要素内に貼り付ける必要があります。

    <TextBlock Text="you have no notifications registered" Name="EmptyTextBlock" Visibility="Collapsed"/>
      <ListBox Name="NotificationListBox">
        <ListBox.ItemTemplate>
        <DataTemplate>
          <Grid Background="Transparent" Margin="0,0,0,30">
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="380"/>
              <ColumnDefinition Width="50"/>
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0">
    
              <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding Title}" TextWrapping="NoWrap" Foreground="{StaticResource PhoneAccentBrush}" FontWeight="Bold"/>
                <TextBlock Text="{Binding Content}" TextWrapping="Wrap" Foreground="{StaticResource PhoneAccentBrush}"/>
    
                <StackPanel Orientation="Horizontal">
                  <TextBlock Text="begin "/>
                  <TextBlock Text="{Binding BeginTime}" HorizontalAlignment="Right"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                  <TextBlock Text="expiration "/>
                  <TextBlock Text="{Binding ExpirationTime}" HorizontalAlignment="Right"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                  <TextBlock Text="recurrence "/>
                  <TextBlock Text="{Binding RecurrenceType}" HorizontalAlignment="Right"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                  <TextBlock Text="is scheduled? "/>
                  <TextBlock Text="{Binding IsScheduled}" HorizontalAlignment="Right"/>
                </StackPanel>
              </StackPanel>
            </Grid>
            <Grid Grid.Column="1">
              <Button Tag="{Binding Name}" Click="deleteButton_Click" Content="X" BorderBrush="Red" Background="Red" Foreground="{StaticResource PhoneBackgroundBrush}" VerticalAlignment="Top" BorderThickness="0" Width="50" Padding="0,0,0,0"></Button>
            </Grid>
          </Grid>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
    
    

    貼り付けたコードを参照し、以下の要素を確認します。

    • 最初の TextBlock コントロールは、表示するスケジュールされた通知がないときに、ユーザーに対してメッセージを表示するために使用されます。C# の分離コード ページでは、一覧に項目がない場合にこのコントロールの Visibility プロパティを Visible に、一覧に表示する項目がある場合は Collapsed に切り替えます。

    • ListBox 要素は、スケジュールされた通知とその関連データのすべての一覧を表示するコントロールを定義します。この XAML コードの残りの部分は、実際にリストに項目を追加するわけではありません。代わりに、バインドされたデータの表示方法を ListBox に指示する DataTemplate を含んでいます。ListBox の名前 "NotificationListBox" は、C# 分離コード ページでコントロールを参照するために使用する名前です。

    • Grid 要素と StackPanel 要素は、他のコントロールのレイアウトを構成するのに使用されるコンテナー コントロールです。

    • Grid コントロールおよび StackPanel コントロール内部の TextBlock 要素は、ScheduledNotification クラスのプロパティの値を表示します。たとえば、Content プロパティは、アラームまたはリマインダーのテキスト コンテンツです。RecurrenceType プロパティは、リマインダーを起動する間隔を示します。構文 "{Binding RecurrenceType}" は、これらの各コントロールの Text プロパティを指定されたプロパティ名にマッピングします。各値にラベルを提供するため、追加の TextBlock コントロールが含まれます。Alarm クラスは Title プロパティをサポートしていないので、このプロパティにバインドされたコントロールはアラームでは空になることに注意してください。

    • 最後に、ユーザーがスケジュールされた通知を削除できるように Button が追加されます。アラームまたはリマインダーの Name プロパティは、各通知を一意に識別するために使用されます。この値は、ButtonTag プロパティにバインドされるので、ボタンの Click イベント ハンドラー deleteButton_Click で削除する通知を特定できます。このハンドラーは、あとから C# 分離コード ページに追加されます。

  3. 最後に MainPage.xaml に追加する必要があるのは、ApplicationBar です。ApplicationBar には ApplicationBarIconButton が 1 つあり、ユーザーはこのボタンをクリックして、新しい通知を追加するために使用するページに移動できます。次のコードを、テンプレートに含まれているコメントアウトされた ApplicationBar コードの例に貼り付けます。また、このコードがコメントアウトされないように、コメントを置き換えてください。

    <phone:PhoneApplicationPage.ApplicationBar>
      <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
       <shell:ApplicationBarIconButton IconUri="/Images/add.png" Text="Add" Click="ApplicationBarAddButton_Click"/>
      </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>
    
    
  4. 次に、MainPage.xaml.cs のコードを変更します。最初に、using ディレクティブを追加して、Reminder クラスを含む名前空間を組み込む必要があります。ファイルの先頭にある他の using ディレクティブに次の行を追加します。

    using Microsoft.Phone.Scheduler;
    
    
  5. 次に、IEnumerable<ScheduledNotification> 型のクラス変数を追加します。変数の型の "<ScheduledNotification>" の部分は、IEnumerable オブジェクトに ScheduledNotification オブジェクトが含まれることを示します。このコードを MainPage クラス定義のすぐ下に追加します。

    public partial class MainPage : PhoneApplicationPage
    {
      IEnumerable<ScheduledNotification> notifications;
    
    
  6. ResetItemsList という名前のメソッドを作成します。このメソッドは、GetActions<(Of <<'(T>)>>)()()()() メソッドを使用して、このアプリケーションの ScheduledActionService に登録されている ScheduledNotification オブジェクトを取得します。

    スケジュールされた通知の一覧に項目が含まれている場合、テキスト ブロックは、通知が登録されていないことをユーザーに通知するには折りたたまれ、それ以外の場合は表示されます。最後に、ListBoxItemsSource プロパティが、通知の一覧を格納する IEnumerable クラス変数に設定されます。これにより、ListBox が強制的に更新されます。次のメソッド定義を MainPage クラス定義内に貼り付けます。

    private void ResetItemsList()
    {
      // Use GetActions to retrieve all of the scheduled actions
      // stored for this application. The type <Reminder> is specified
      // to retrieve only Reminder objects.
      //reminders = ScheduledActionService.GetActions<Reminder>();
      notifications = ScheduledActionService.GetActions<ScheduledNotification>();
    
      // If there are 1 or more reminders, hide the "no reminders"
      // TextBlock. IF there are zero reminders, show the TextBlock.
      //if (reminders.Count<Reminder>() > 0)
      if (notifications.Count<ScheduledNotification>() > 0)
      {
        EmptyTextBlock.Visibility = Visibility.Collapsed;
      }
      else
      {
        EmptyTextBlock.Visibility = Visibility.Visible;
      }
    
      // Update the ReminderListBox with the list of reminders.
      // A full MVVM implementation can automate this step.
      NotificationListBox.ItemsSource = notifications;
    }
    
    
  7. ページの PhoneApplicationPage 基本クラスの OnNavigatedTo(NavigationEventArgs) メソッドをオーバーライドします。このクラスは、アプリケーションの起動時やページが初めて表示される場合など、ユーザーがページに移動したときは常に呼び出されます。このイベントが発生するたびに、定義された ResetItemsList メソッドが呼び出されます。

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
      //Reset the ReminderListBox items when the page is navigated to.
      ResetItemsList();
    }
    
    
  8. ここで、XAML で作成された削除ボタンの Click イベント ハンドラーを実装します。一覧のスケジュールされた通知のそれぞれについて 1 つずつ削除ボタンがありますが、これらのボタンはすべて同じハンドラーを使用します。削除する通知を特定するために、このメソッドは Tag プロパティを調べた後、ScheduledActionServiceRemove(String) メソッドを呼び出します。ScheduledNotificationName プロパティ (および他のすべての ScheduledAction 型) は、各アプリケーションのオブジェクトを一意に識別します。項目が削除された後、UI を更新するために ResetItemsList が呼び出されます。

    private void deleteButton_Click(object sender, RoutedEventArgs e)
    {
      // The scheduled action name is stored in the Tag property
      // of the delete button for each reminder.
      string name = (string)((Button)sender).Tag;
    
      // Call Remove to unregister the scheduled action with the service.
      ScheduledActionService.Remove(name);
    
      // Reset the ReminderListBox items
      ResetItemsList();
    }
    
    
  9. MainPage.xaml.cs に対する最後の更新は、ユーザーがタップして新しいアラームまたはリマインダーを追加するための ApplicationBarIconButtonClick イベント ハンドラーを作成することです。Navigate メソッドは、次のセクションで実装する AddNotification.xaml にアプリケーションをナビゲートするために使用されます。

    private void ApplicationBarAddButton_Click(object sender, EventArgs e)
    {
      // Navigate to the AddReminder page when the add button is clicked.
      NavigationService.Navigate(new Uri("/AddNotification.xaml", UriKind.RelativeOrAbsolute));
    }
    
    

このチュートリアルの次の手順では、ユーザーが新しいアラームおよびリマインダーを追加できるようにするページを作成します。このページでは、新しいアラームまたはリマインダーを起動する日時をユーザーが選択できるようにする必要があります。Windows Phone SDK 7.1 には、このタスクを実行するための組み込みのコントロールが用意されていないので、コントロールを一から作成するのは大仕事です。このような理由から、この例では Silverlight Toolkit for Windows Phone に含まれている DatePicker コントロールと TimePicker コントロールを使用します。ここで示すコードをコンパイルする前に、このツールキットをインストールする必要があります。以下の手順では、アプリケーションでツールキットのコントロールを使用する方法について説明します。

スケジュールされた通知を追加するページを作成するには

  1. Silverlight for Windows Phone Toolkit をインストールします。

  2. コンピューターの [スタート] ボタンをクリックし、[すべてのプログラム]、[Silverlight for Windows Phone]、[バイナリ] の順にクリックします。表示されている Windows エクスプローラー ウィンドウで、Microsoft.Phone.Controls.Toolkit.dll をコピーし、アプリケーションのプロジェクト ディレクトリに貼り付けます。Visual Studio で、[プロジェクト] メニューの [参照の追加] をクリックします。アプリケーションのプロジェクト ディレクトリを参照し、Microsoft.Phone.Controls.Toolkit.dll を選択し、[OK] をクリックします。

  3. 新しいページをプロジェクトに追加します。[プロジェクト] メニューから、[新しい項目の追加] を選択します。[Windows Phone Portrait Page] を選択します。[名前] ボックスに、「AddNotification.xaml」と入力します。

  4. ソリューション エクスプローラーで、AddNotification.xaml をダブルクリックして開きます。phone:PhoneApplicationPage ルート要素で、他の名前空間宣言の次に、XML 名前空間宣言を追加します。

    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    
    
  5. 次に、ユーザーが新しいアラーム リマインダーのプロパティを設定できるようにするコントロールを追加します。AddNotification.xaml に次のコードを貼り付けます。このコードは、"ContentPanel" という名前の Grid 要素の内部に貼り付けてください。

    
    <ScrollViewer>
      <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
          <RadioButton Content="Reminder" Name="reminderRadioButton" GroupName="ReminderOrAlarm" IsChecked="True"></RadioButton>
          <RadioButton Content="Alarm" Name="alarmRadioButton" GroupName="ReminderOrAlarm" ></RadioButton>
        </StackPanel>
        <TextBlock Height="30" HorizontalAlignment="Left"  Name="titleLabel" Text="title" VerticalAlignment="Top" />
        <TextBox Height="72" HorizontalAlignment="Left"  Name="titleTextBox" Text="" VerticalAlignment="Top" Width="460" MaxLength="63"/>
        <TextBlock Height="30" HorizontalAlignment="Left"  Name="contentLabel" Text="content" VerticalAlignment="Top" />
        <TextBox Height="160" HorizontalAlignment="Left"  Name="contentTextBox" Text="" VerticalAlignment="Top" Width="460" TextWrapping="Wrap" MaxLength="256" AcceptsReturn="True" />
        <TextBlock Height="30" HorizontalAlignment="Left"  Name="beginTimeLabel" Text="begin time" VerticalAlignment="Top" />
        <StackPanel Orientation="Horizontal">
          <toolkit:DatePicker x:Name="beginDatePicker" Width="220" HorizontalAlignment="Left"></toolkit:DatePicker>
          <toolkit:TimePicker x:Name="beginTimePicker"  Width="220" HorizontalAlignment="Right"></toolkit:TimePicker>
        </StackPanel>
        <TextBlock Height="30" HorizontalAlignment="Left"  Name="expirationTimeLabel" Text="expiration time" VerticalAlignment="Top" />
        <StackPanel Orientation="Horizontal">
          <toolkit:DatePicker x:Name="expirationDatePicker" Width="220" HorizontalAlignment="Left"></toolkit:DatePicker>
          <toolkit:TimePicker x:Name="expirationTimePicker" Width="220" HorizontalAlignment="Right"></toolkit:TimePicker>
        </StackPanel>
        <Grid>
          <RadioButton Content="once" Height="72" HorizontalAlignment="Left" Margin="0,0,0,0" Name="onceRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval" IsChecked="True"/>
          <RadioButton Content="weekly" Height="72" HorizontalAlignment="Left" Margin="0,70,0,0" Name="weeklyRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval"/>
          <RadioButton Content="daily" Height="72" HorizontalAlignment="Left" Margin="0,140,0,0" Name="dailyRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval"/>
          <RadioButton Content="monthly" Height="72" HorizontalAlignment="Left" Margin="240,0,0,0" Name="monthlyRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval"/>
          <RadioButton Content="end of month" Height="72" HorizontalAlignment="Left" Margin="240,70,0,0" Name="endOfMonthRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval"/>
          <RadioButton Content="yearly" Height="72" HorizontalAlignment="Left" Margin="240,140,0,0" Name="yearlyRadioButton" VerticalAlignment="Top" GroupName="ScheduleInterval"/>
        </Grid>
        <TextBlock Height="30" HorizontalAlignment="Left" Name="param1Label" Text="context parameter 1" VerticalAlignment="Top" />
        <TextBox Height="72" HorizontalAlignment="Left" Name="param1TextBox" Text="" VerticalAlignment="Top" Width="440" MaxLength="63"/>
        <TextBlock Height="30" HorizontalAlignment="Left" Name="param2Label" Text="context parameter 2" VerticalAlignment="Top" />
        <TextBox Height="72" HorizontalAlignment="Left" Name="param2TextBox" Text="" VerticalAlignment="Top" Width="440" MaxLength="63"/>
    
      </StackPanel>
    </ScrollViewer>
    
    
    

    前のセクションの XAML コードには、次のコントロールが含まれています。

    • ユーザーがアラームの追加とリマインダーの追加を切り替えることができるようにする RadioButton コントロールのペア。

    • Title プロパティと Content プロパティ用の TextBox コントロール。これらのコントロールに MaxLength プロパティを設定して、入力をこれらのプロパティの最大文字数に制限します。Alarm クラスでは、Title プロパティをサポートしていないので、この値はアラームの作成時には使用されないことに注意してください。

    • BeginTime プロパティ用の DatePicker コントロールと TimePicker コントロール。この 2 つによって、通知を最初に起動する日時を指定します。これらのコントロールは Silverlight Toolkit for Windows Phone に含まれるものであり、前に定義した toolkit 名前空間を使用するのはこのためです。

    • ExpirationTime プロパティ用の DatePicker コントロールと TimePicker コントロール。これによって、定期的な通知を最後に起動する日時を指定します。

    • RecurrenceType プロパティを設定するための RadioButton。これによって、通知を起動する間隔を指定します。

    • ユーザーが NavigationUri プロパティに添付される任意の 2 つのパラメーター値を設定できるようにする 2 つのテキスト ボックス。リマインダーが起動し、ユーザーがリマインダーの UI をタップすると、アプリケーションが起動し、指定された URI にナビゲートされます。この機能によって、コンテキスト情報をリマインダーに添付できます。この機能はアラームではサポートされません。

    • TextBlock コントロールは、他のコントロールのラベルとして、最初から最後まで使用されます。

  6. コメントアウトされた ApplicationBar コードを次のコードで置き換えることによって、ApplicationBar を XAML に追加します。これによって、クリックしたときに、UI の値から新しいスケジュールされた通知を作成し、システムに登録する、[Save] ボタンの作成が試行されます。

    <phone:PhoneApplicationPage.ApplicationBar>
      <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
        <shell:ApplicationBarIconButton IconUri="/Images/save.png" Text="Save" Click="ApplicationBarSaveButton_Click"/>
      </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>
    
    
  7. ソリューション エクスプローラーで、AddNotification.xaml.cs をダブルクリックして開き、ファイルの先頭にある using ディレクティブに、Scheduler 名前空間の using ディレクティブを追加します。

    using Microsoft.Phone.Scheduler;
    
    
  8. このページの他のコードはすべて、[Save] ボタンの Click イベント ハンドラーに配置されます。この空の定義を、AddNotification クラス定義内に貼り付けます。

    private void ApplicationBarSaveButton_Click(object sender, EventArgs e)
    {
      // The code in the following steps goes here.
    }
    
    
  9. 新しい通知の一意の名前を生成します。アプリケーションでは、通知について任意の命名規則を使用できますが、各通知の名前はアプリケーション内で一意である必要があります。この例では、各リマインダー名の GUID を生成します。次のコードを、[Save] ボタンの Click ハンドラー内に貼り付けます。

      // Generate a unique name for the new notification. You can choose a
      // name that is meaningful for your app, or just use a GUID.
      String name = System.Guid.NewGuid().ToString();
    
    
  10. BeginTime プロパティの日付と時刻の値を結合します。この時刻が現在の時刻よりも後であることを検証し、そうでない場合は、ユーザーに警告して Click ハンドラーを終了します。次に、ExpirationTime 値についても同じ処理を行います。有効期限の時刻は開始時刻よりも後である必要があります。

      // Get the begin time for the notification by combining the DatePicker
      // value and the TimePicker value.
      DateTime date = (DateTime)beginDatePicker.Value;
      DateTime time = (DateTime)beginTimePicker.Value;
      DateTime beginTime = date + time.TimeOfDay;
    
      // Make sure that the begin time has not already passed.
      if (beginTime < DateTime.Now)
      {
        MessageBox.Show("the begin date must be in the future.");
        return;
      }
    
      // Get the expiration time for the notification.
      date = (DateTime)expirationDatePicker.Value;
      time = (DateTime)expirationTimePicker.Value;
      DateTime expirationTime = date + time.TimeOfDay;
    
      // Make sure that the expiration time is after the begin time.
      if (expirationTime < beginTime)
      {
        MessageBox.Show("expiration time must be after the begin time.");
        return;
      }
    
    
  11. 繰り返しの間隔を特定するために、いずれのラジオ ボタンがオンであるかを確認します。このプロパティの既定値は、None です。

      // Determine which recurrence radio button is checked.
      RecurrenceInterval recurrence = RecurrenceInterval.None;
      if (dailyRadioButton.IsChecked == true)
      {
        recurrence = RecurrenceInterval.Daily;
      }
      else if (weeklyRadioButton.IsChecked == true)
      {
        recurrence = RecurrenceInterval.Weekly;
      }
      else if (monthlyRadioButton.IsChecked == true)
      {
        recurrence = RecurrenceInterval.Monthly;
      }
      else if (endOfMonthRadioButton.IsChecked == true)
      {
        recurrence = RecurrenceInterval.EndOfMonth;
      }
      else if (yearlyRadioButton.IsChecked == true)
      {
        recurrence = RecurrenceInterval.Yearly;
      }
    
    
  12. NavigationUri プロパティを設定するための URI を構築します。URI のベースは、次に作成する ShowParams.xaml に設定されます。パラメーター テキスト ボックスの値は、クエリ文字列パラメーターとして URI に追加されます。この値は、リマインダーが作成された場合にのみ使用されます。

      // Create a URI for the page that will be launched if the user
      // taps on the reminder. Use query string parameters to pass 
      // content to the page that is launched.
      string param1Value = param1TextBox.Text;
      string param2Value = param2TextBox.Text;
      string queryString = "";
      if (param1Value != "" && param2Value != "")
      {
        queryString = "?param1=" + param1Value + "&param2=" + param2Value;
      }
      else if(param1Value != "" || param2Value != "")
      {
        queryString = (param1Value!=null) ? "?param1="+param1Value : "?param2="+param2Value;
      }
      Uri navigationUri = new Uri("/ShowParams.xaml" + queryString, UriKind.Relative);
    
    
    
  13. リマインダーの RadioButton がオンになっているかどうかを確認します。オンになっている場合は、新しいリマインダーを作成し、UI から抽出されたプロパティを設定します。ScheduledActionService クラスの Add(ScheduledAction) メソッドを使用して、システムに新しいリマインダーを登録します。

      if ((bool)reminderRadioButton.IsChecked)
      {
        Reminder reminder = new Reminder(name);
        reminder.Title = titleTextBox.Text;
        reminder.Content = contentTextBox.Text;
        reminder.BeginTime = beginTime;
        reminder.ExpirationTime = expirationTime;
        reminder.RecurrenceType = recurrence;
        reminder.NavigationUri = navigationUri;
    
        // Register the reminder with the system.
        ScheduledActionService.Add(reminder);
      }
    
    
  14. リマインダーの RadioButton がオンになっていない場合は、アラームを作成します。この作業は、Title プロパティと NavigationUri プロパティがサポートされていないことを除いて、リマインダーを追加する作業と同じです。また、アラームの場合は、アラームの起動時に再生する Sound を指定することもできます。プロジェクトにサウンド ファイルを追加するには、Visual Studio で [プロジェクト] メニューの [既存の項目の追加] を選択します。サウンドを追加したら、[ビルド アクション] プロパティが [コンテンツ] に設定されていることを確認します。

      else
      {
        Alarm alarm = new Alarm(name);
        alarm.Content = contentTextBox.Text;
        alarm.Sound = new Uri("/Ringtones/Ring01.wma", UriKind.Relative);
        alarm.BeginTime = beginTime;
        alarm.ExpirationTime = expirationTime;
        alarm.RecurrenceType = recurrence;
    
        ScheduledActionService.Add(alarm);
      }
    
    
  15. 最後に、GoBack()()()() を呼び出して、ユーザーにリマインダーの一覧ページを返します。

      // Navigate back to the main reminder list page.
     NavigationService.GoBack();
    
    

前のセクションでは、新しいアラームおよびリマインダーをシステムに追加するためのページを作成しました。リマインダーが起動し、ユーザーがリマインダーをタップすると、NavigationUri プロパティで指定されたページが開きます。この例では、URI に追加されたクエリ文字列パラメーターを単に表示するページを作成します。

スケジュールにより起動されるページを作成するには

  1. 新しいページをプロジェクトに追加します。[プロジェクト] メニューから、[新しい項目の追加] を選択します。[Windows Phone Portrait Page] を選択します。[名前] ボックスに、「ShowParams.xaml」と入力します。

  2. ShowParams.xaml に、クエリ文字列パラメーターを表示するために使用される TextBlock コントロールを追加します。コードは "ContentPanel" という名前の Grid 要素内に貼り付ける必要があります。

    <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,10,0,0" Name="param1Label" Text="param1 value:" VerticalAlignment="Top" Foreground="{StaticResource PhoneForegroundBrush}" />
    <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,40,0,0" Name="param1TextBlock" Text="TextBlock" VerticalAlignment="Top" Foreground="{StaticResource PhoneAccentBrush}"/>
    <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,80,0,0" Name="param2Label" Text="param2 value:" VerticalAlignment="Top" Foreground="{StaticResource PhoneForegroundBrush}"/>
    <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,110,0,0" Name="param2TextBlock" Text="TextBlock" VerticalAlignment="Top" Foreground="{StaticResource PhoneAccentBrush}" />
    
    
    
  3. PhoneApplicationPage 基本クラスの OnNavigatedTo(NavigationEventArgs) メソッドをオーバーライドします。このメソッドは、リマインダーからアプリケーションが起動し、このページへのナビゲーションが発生したときに呼び出されます。このメソッドでは、NavigationContext クラスを使用してクエリ文字列値を取得し、TextBlock オブジェクトの Text プロパティを設定してこの値を表示します。

    // Implement the OnNavigatedTo method and use NavigationContext.QueryString
    // to get the parameter values passed by the reminder.
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
      base.OnNavigatedTo(e);
    
      string param1Value = "" ;
      string param2Value = "";
    
      NavigationContext.QueryString.TryGetValue("param1", out param1Value);
      NavigationContext.QueryString.TryGetValue("param2", out param2Value);
    
      param1TextBlock.Text = param1Value;
      param2TextBlock.Text = param2Value;
    }
    
    

表示:
© 2015 Microsoft