更新の保留アクティブ化機能を備えたトースト

PendingUpdate を使用すると、トースト通知で複数ステップの対話を作成できます。 たとえば、以下に示すように、後続のトーストがそれまでのトーストへの応答に依存する一連のトースト通知を作成できます。

更新の保留を使ったトースト

重要

デスクトップ Fall Creators Update と 2.0.0 の Notifications ライブラリが必要です。保留中の更新作業を表示するには、デスクトップ ビルド 16299 以降を実行している必要があります。 ボタンに PendingUpdate を割り当てるには、UWP Community Toolkit Notifications NuGet ライブラリのバージョン 2.0.0 以降を使用する必要があります。 PendingUpdate はデスクトップでのみサポートされ、他のデバイスでは無視されます。

前提条件

この記事では、読者が以下に関する実用的な知識を持っていることを想定しています。

概要

アクティブ化後の動作として "更新の保留" を使用するトースト通知を実装するには

  1. トーストのバックグラウンドのアクティブ化ボタンで、AfterActivationBehaviorPendingUpdate を指定する

  2. トーストの送信時に Tag (および必要に応じて、Group) を割り当てる

  3. ユーザーがボタンをクリックすると、アプリのバックグラウンド タスクがアクティブ化され、トーストが更新を保留中の状態で画面に表示されたままになる

  4. バックグラウンド タスクで、同じ TagGroup を使用して、新しいコンテンツを持つ新しいトーストを送信する

PendingUpdate を割り当てる

バックグラウンドのアクティブ化ボタンで、AfterActivationBehaviorPendingUpdate に設定します。 この設定は、ActivationTypeBackground のボタンでのみ有効であることに注意してください。

new ToastContentBuilder()

    .AddText("Would you like to order lunch today?")

    .AddButton(new ToastButton("Yes", "action=orderLunch")
    {
        ActivationType = ToastActivationType.Background,

        ActivationOptions = new ToastActivationOptions()
        {
            AfterActivationBehavior = ToastAfterActivationBehavior.PendingUpdate
        }
    });

通知で Tag を使用する

後で通知を置換するためには、通知に Tag (および必要に応じて、Group) を割り当てる必要があります。

// Create the notification
var notif = new ToastNotification(content.GetXml())
{
    Tag = "lunch"
};

// And show it
ToastNotificationManager.CreateToastNotifier().Show(notif);

トーストを新しいコンテンツと置換する

ユーザーがボタンをクリックすると、それに対してバックグラウンド タスクがトリガーされ、トーストを新しいコンテンツと置換する必要が生じます。 トーストの置換は、同じ TagGroup を使って新しいトーストを送信するだけで完了します。

ボタンのクリックに対応してトーストを置換する場合、ユーザーは既にトーストと対話しているため、オーディオをサイレント モードに設定することを強くお勧めします。

// Generate new content
ToastContent content = new ToastContent()
{
    ...

    // We disable audio on all subsequent toasts since they appear right after the user
    // clicked something, so the user's attention is already captured
    Audio = new ToastAudio() { Silent = true }
};

// Create the new notification
var notif = new ToastNotification(content.GetXml())
{
    Tag = "lunch"
};

// And replace the old one with this one
ToastNotificationManager.CreateToastNotifier().Show(notif);