Använda appaviseringar med en WPF app

Ett appmeddelande är ett popup-fönster för användargränssnittet som visas utanför appens fönster och som levererar information eller åtgärder i tid till användaren. Meddelanden kan vara rent informationsbaserade, kan starta din app när du klickar eller utlösa en bakgrundsåtgärd utan att föra din app till förgrunden.

Skärmbild av ett appmeddelande

Den här artikeln beskriver stegen för att skapa och skicka ett appmeddelande från en WPF app och sedan hantera aktivering när användaren interagerar med den. I den här artikeln används API:erna Windows App SDKMicrosoft.Windows.AppNotifications.

En översikt över appmeddelanden och vägledning för andra ramverk finns i Översikt över appaviseringar.

Den här artikeln beskriver lokala meddelanden. Information om hur du levererar meddelanden från en molntjänst finns i Push-meddelanden.

Viktigt!

Meddelanden för upphöjda appar (administratör) stöds inte för närvarande.

Förutsättningar

  • En WPF app som riktar sig till .NET 6 eller senare
  • NuGet-paketet Windows App SDK (Microsoft.WindowsAppSDK)

Konfigurera projektet

Kontrollera att .csproj innehåller ett Windows målramverk i projektfilen (TargetFramework):

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

Lägg till Windows App SDK NuGet-paketet:

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

För unpackade appar, lägg till:

<WindowsPackageType>None</WindowsPackageType>

Registrera dig för appmeddelanden

I din App.xaml.cs registrerar du dig för meddelanden i Startup-händelsehanteraren. Du måste registrera din NotificationInvoked-hanterareinnan du anropar Registrera.

App.xaml Uppdatera först för att använda en Startup händelsehanterare i stället för 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>

Implementera sedan logiken för start och meddelandehantering:

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

Viktigt!

Du måste ringa Register innan du ringer AppInstance.GetCurrent().GetActivatedEventArgs(). NotificationInvoked Hanteraren måste vara registrerad innan Register() anropas.

Anmärkning

För opaketerade appar konfigurerar Register() automatiskt COM-serverregistreringen som tillåter Windows att starta appen när ett meddelande klickas. Du behöver inte konfigurera COM-aktivering eller AUMID manuellt.

Skicka ett appmeddelande

Använd AppNotificationBuilder för att skapa meddelandeinnehåll och AppNotificationManager.Show för att skicka ett meddelande.

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

Information om hur du lägger till knappar, bilder, indata och annat innehållsrikt innehåll i dina meddelanden finns i Appaviseringsinnehåll.

Installation av paketerad app

För uppackade WPF-appar hanterar Register() COM-registrering automatiskt. För paketerade appar (MSIX) måste du lägga till följande tillägg i :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>

Viktigt!

Attributet Executable ska bara innehålla det körbara filnamnet (till exempel YourApp.exe), inte en underkatalogsökväg.