App-meldingen gebruiken met een WPF-app

Een app-melding is een pop-up van de gebruikersinterface die buiten het venster van uw app wordt weergegeven, waarbij tijdige informatie of acties aan de gebruiker worden geleverd. Meldingen kunnen puur informatief zijn, uw app starten wanneer erop wordt geklikt of een achtergrondactie activeren zonder uw app op de voorgrond te plaatsen.

Schermopname van een app-melding

In dit artikel wordt u begeleid bij de stappen voor het maken en verzenden van een app-melding van een WPF-app en het verwerken van de activering wanneer de gebruiker ermee werkt. In dit artikel worden de API's Windows App SDKMicrosoft.Windows.AppNotifications gebruikt.

Zie het overzicht van app-meldingen en -richtlijnen voor andere frameworks voor een overzicht van app-meldingen.

In dit artikel worden lokale meldingen behandeld. Zie Pushmeldingen voor informatie over het leveren van meldingen van een cloudservice.

Belangrijk

Meldingen voor apps met verhoogde beheerrechten worden momenteel niet ondersteund.

Vereiste voorwaarden

  • Een WPF-app gericht op .NET 6 of hoger
  • Het NuGet-pakket Windows App SDK (Microsoft.WindowsAppSDK)

Stel uw project in

Controleer in uw projectbestand (.csproj) dat de TargetFramework een target framework voor Windows bevat:

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

Voeg het Windows App SDK NuGet-pakket toe:

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

Voor uitgepakte apps voegt u het volgende toe:

<WindowsPackageType>None</WindowsPackageType>

Registreren voor app-meldingen

Registreer u voor meldingen in de Startup-gebeurtenishandler binnen uw App.xaml.cs. U moet uw NotificationInvoked-handler registreren voordatu Register aanroept.

Werk App.xaml eerst bij om een gebeurtenishandler voor Startup te gebruiken in plaats van StartupUri.

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>

Implementeer vervolgens de logica voor het afhandelen van opstart- en meldingen:

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

Belangrijk

U moet bellen Register voordat u belt AppInstance.GetCurrent().GetActivatedEventArgs(). De NotificationInvoked handler moet worden geregistreerd voordat Register() wordt aangeroepen.

Opmerking

Voor uitgepakte apps stelt Register() automatisch de COM-serverregistratie in waarmee Windows uw app kan starten wanneer op een melding wordt geklikt. U hoeft com-activering of een AUMID niet handmatig te configureren.

Een app-melding verzenden

Gebruik AppNotificationBuilder om inhoud van meldingen samen te stellen en AppNotificationManager.Show om een melding te verzenden.

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

Zie App-meldingsinhoud voor informatie over het toevoegen van knoppen, afbeeldingen, invoer en andere uitgebreide inhoud aan uw meldingen.

Installatie van verpakte app

Voor uitgepakte WPF-apps verwerkt Register() com-registratie automatisch. Voor verpakte apps (MSIX) moet u de volgende extensies toevoegen aan uw Package.appxmanifest:

<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>

Belangrijk

Het Executable kenmerk mag alleen de naam van het uitvoerbare bestand bevatten (bijvoorbeeld YourApp.exe), niet een submappad.