Freigeben über


Verwenden von App-Benachrichtigungen mit einer WPF-App

Eine App-Benachrichtigung ist ein UI-Popup, das außerhalb des Fensters Ihrer App angezeigt wird und dem Benutzer zeitnah Informationen oder Aktionen liefert. Benachrichtigungen können rein informativ sein, ihre App beim Klicken starten oder eine Hintergrundaktion auslösen, ohne ihre App in den Vordergrund zu bringen.

Screenshot einer App-Benachrichtigung

Dieser Artikel führt Sie durch die Schritte zum Erstellen und Senden einer App-Benachrichtigung aus einer WPF App und behandelt dann die Aktivierung, wenn der Benutzer damit interagiert. In diesem Artikel werden die APIs Windows App SDKMicrosoft.Windows.AppNotifications verwendet.

Eine Übersicht über App-Benachrichtigungen und Anleitungen für andere Frameworks finden Sie in der Übersicht über App-Benachrichtigungen.

In diesem Artikel werden lokale Benachrichtigungen behandelt. Informationen zum Übermitteln von Benachrichtigungen von einem Clouddienst finden Sie unter Pushbenachrichtigungen.

Von Bedeutung

Benachrichtigungen für Apps mit erhöhten Rechten (Administrator) werden derzeit nicht unterstützt.

Voraussetzungen

  • Eine WPF App für .NET 6 oder höher
  • Das Windows App SDK NuGet-Paket (Microsoft.WindowsAppSDK)

Einrichten Ihres Projekts

Stellen Sie in der Projektdatei (.csproj) sicher, dass die TargetFramework ein Windows Zielframework enthält:

<TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>

Fügen Sie das Windows App SDK NuGet-Paket hinzu:

<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250310001" />

Fügen Sie für entpackte Apps Folgendes hinzu:

<WindowsPackageType>None</WindowsPackageType>

Registrieren für App-Benachrichtigungen

Registrieren Sie in Ihrem App.xaml.cs für Benachrichtigungen im Startup-Ereignishandler. Sie müssen den NotificationInvoked-Handler registrieren , bevorSie Register aufrufen.

Aktualisieren Sie zuerst App.xaml, um einen Startup-Ereignishandler anstelle von StartupUri zu verwenden.

App.xaml

<Application x:Class="WpfNotifications.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="OnStartup">
</Application>

Implementieren Sie dann die Logik für die Start- und Benachrichtigungsverarbeitung:

App.xaml.cs

using System.Windows;
using Microsoft.Windows.AppNotifications;

namespace WpfNotifications;

public partial class App : Application
{
    private void OnStartup(object sender, StartupEventArgs e)
    {
        // Register the notification handler before calling Register
        AppNotificationManager.Default.NotificationInvoked += OnNotificationInvoked;
        AppNotificationManager.Default.Register();

        // Show the main window
        var mainWindow = new MainWindow();
        mainWindow.Show();
    }

    private void OnNotificationInvoked(
        AppNotificationManager sender, 
        AppNotificationActivatedEventArgs args)
    {
        // NotificationInvoked is raised on a background thread,
        // so dispatch to the UI thread for any UI updates
        Current.Dispatcher.Invoke(() =>
        {
            // Parse args.Argument to determine what action to take.
            // args.Argument contains the arguments from the notification
            // or button that was clicked, as key=value pairs separated
            // by '&', for example "action=reply&conversationId=9813".
        });
    }

    protected override void OnExit(ExitEventArgs e)
    {
        AppNotificationManager.Default.Unregister();
        base.OnExit(e);
    }
}

Von Bedeutung

Sie müssen Register aufrufen, bevor Sie AppInstance.GetCurrent().GetActivatedEventArgs() aufrufen. Der NotificationInvoked Handler muss registriert werden, bevor Register() aufgerufen wird.

Hinweis

Bei entpackten Apps richtet Register() automatisch die COM-Serverregistrierung ein, mit der Windows ihre App starten kann, wenn auf eine Benachrichtigung geklickt wird. Sie müssen die COM-Aktivierung oder eine AUMID nicht manuell konfigurieren.

Senden einer App-Benachrichtigung

Verwenden Sie AppNotificationBuilder , um Benachrichtigungsinhalte und AppNotificationManager.Show zu erstellen, um eine Benachrichtigung zu senden.

MainWindow.xaml.cs

using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;

private void SendNotification()
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Informationen zum Hinzufügen von Schaltflächen, Bildern, Eingaben und anderen umfangreichen Inhalten zu Ihren Benachrichtigungen finden Sie unter App-Benachrichtigungsinhalte.

App-Paketeinrichtung

Bei entpackten WPF Apps verarbeitet Register() die COM-Registrierung automatisch. Für verpackte Apps (MSIX) müssen Sie die folgenden Erweiterungen zu Ihrem Package.appxmanifestHinzufügen:

<Package
  xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
  xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  IgnorableNamespaces="... com desktop">

  <Applications>
    <Application>
      <Extensions>

        <!--Specify which CLSID to activate when notification is clicked-->
        <desktop:Extension Category="windows.toastNotificationActivation">
          <desktop:ToastNotificationActivation 
            ToastActivatorCLSID="YOUR-GUID-HERE" />
        </desktop:Extension>

        <!--Register COM CLSID-->
        <com:Extension Category="windows.comServer">
          <com:ComServer>
            <com:ExeServer 
              Executable="YourApp.exe" 
              Arguments="----AppNotificationActivated:" 
              DisplayName="YourApp">
              <com:Class Id="YOUR-GUID-HERE" />
            </com:ExeServer>
          </com:ComServer>
        </com:Extension>

      </Extensions>
    </Application>
  </Applications>
</Package>

Von Bedeutung

Das Executable Attribut sollte nur den Dateinamen der ausführbaren Datei (z. B. YourApp.exe), nicht einen Unterverzeichnispfad enthalten.