情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のアラームとリマインダーを作成する方法

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

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

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

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

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

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

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

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

  1. Visual Studio で、新しい Windows Phone アプリを作成します。

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

    プロジェクトの 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<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 には、このタスクを実行するための組み込みのコントロールが用意されていないので、コントロールを新規に作成するのは大仕事です。このような理由から、この例では Windows Phone Toolkit に含まれている DatePicker コントロールと TimePicker コントロールを使用します。ここで示すコードをコンパイルする前に、このツールキットをインストールする必要があります。以下の手順では、アプリでツールキットのコントロールを使用する方法について説明します。

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

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

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

  3. 新しいページをプロジェクトに追加します。[プロジェクト] メニューの [新しい項目の追加] をクリックします。[Windows Phone ポートレート ページ] を選択します。[名前] ボックスに「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 つによって、通知を最初に起動する日時を指定します。これらのコントロールは Windows Phone Toolkit に含まれるものであり、前に定義した 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 ポートレート ページ] を選択します。[名前] ボックスに「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;
    }
    
    

表示: