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

PendingUpdate を使用すると、トースト通知で複数ステップの対話を作成できます。You can use PendingUpdate to create multi-step interactions in your toast notifications. たとえば、以下に示すように、後続のトーストがそれまでのトーストへの応答に依存する一連のトースト通知を作成できます。For example, as seen below, you can create a series of toasts where the subsequent toasts depend on responses from the previous toasts.

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

重要

デスクトップの Fall Creators Update と 2.0.0 の通知ライブラリが必要です:16299 以上保留中の更新プログラムの作業を現在のデスクトップ ビルドを実行する必要があります。Requires Desktop Fall Creators Update and 2.0.0 of Notifications library: You must be running Desktop build 16299 or higher to see pending update work. ボタンに PendingUpdate を割り当てるには、UWP コミュニティ ツールキットの Notifications NuGet ライブラリ、バージョン 2.0.0 以上が必要です。You must use version 2.0.0 or higher of the UWP Community Toolkit Notifications NuGet library to assign PendingUpdate on your buttons. PendingUpdate はデスクトップでのみサポートされ、他のデバイスでは無視されます。PendingUpdate is only supported on Desktop and will be ignored on other devices.

前提条件Prerequisites

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

概要Overview

アクティブ化後の動作として "更新の保留" を使用するトースト通知を実装するにはTo implement a toast that uses pending update as its after activation behavior...

  1. トーストのバックグラウンドのアクティブ化ボタンで、AfterActivationBehaviorPendingUpdate を指定するOn your toast background activation buttons, specify an AfterActivationBehavior of PendingUpdate

  2. トーストの送信時に Tag (および必要に応じて、Group) を割り当てるAssign a Tag (and optionally Group) when sending your toast

  3. ユーザーがボタンをクリックすると、アプリのバックグラウンド タスクがアクティブ化され、トーストが更新を保留中の状態で画面に表示されたままになるWhen the user clicks your button, your background task will be activated, and the toast will be kept on-screen in a pending update state

  4. バックグラウンド タスクで、同じ TagGroup を使用して、新しいコンテンツを持つ新しいトーストを送信するIn your background task, send a new toast with your new content, using the same Tag and Group

PendingUpdate を割り当てるAssign PendingUpdate

バックグラウンドのアクティブ化ボタンで、AfterActivationBehaviorPendingUpdate に設定します。On your background activation buttons, set the AfterActivationBehavior to PendingUpdate. この設定は、ActivationTypeBackground のボタンでのみ有効であることに注意してください。Note that this only works for buttons that have an ActivationType of Background.

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

    ActivationOptions = new ToastActivationOptions()
    {
        AfterActivationBehavior = ToastAfterActivationBehavior.PendingUpdate
    }
}
<action
    content='Yes'
    arguments='action=orderLunch'
    activationType='background'
    afterActivationBehavior='pendingUpdate' />

通知で Tag を使用するUse a Tag on the notification

後で通知を置換するためには、通知に Tag (および必要に応じて、Group) を割り当てる必要があります。In order to later replace the notification, we have to assign the Tag (and optionally the Group) on the notification.

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

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

トーストを新しいコンテンツと置換するReplace the toast with new content

ユーザーがボタンをクリックすると、それに対してバックグラウンド タスクがトリガーされ、トーストを新しいコンテンツと置換する必要が生じます。In response to the user clicking your button, your background task gets triggered and you need to replace the toast with new content. トーストの置換は、同じ TagGroup を使って新しいトーストを送信するだけで完了します。You replace the toast by simply sending a new toast with the same Tag and Group.

ボタンのクリックに対応してトーストを置換する場合、ユーザーは既にトーストと対話しているため、オーディオをサイレント モードに設定することを強くお勧めします。We strongly recommend setting the audio to silent on replacements in response to a button click, since the user is already interacting with your toast.

// 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);