Dela via


Använda Windows App SDK i en WPF-app

Windows App SDK är nästa utveckling i Utvecklingsplattformen för Windows-appar. Men det här avsnittet visar hur du kan använda Windows App SDK-API:er (och Windows Runtime-API:er) i en WPF-app (Windows Presentation Foundation ).

  • I många fall vill du återskapa DIN WPF-app i form av en WinUI 3-app . Bara en av fördelarna med att flytta till WinUI 3 är att ha åtkomst till Fluent Design System (se även Design och koda Windows-appar). Och WinUI 3 är en del av Windows App SDK, så naturligtvis kan en WinUI 3-app använda de andra Windows App SDK-funktionerna och API:erna. Det här avsnittet beskriver inte hur du migrerar DIN WPF-app till WinUI 3.
  • Men om du upptäcker att du använder funktioner i WPF som ännu inte är tillgängliga i WinUI 3 kan du fortfarande använda Windows App SDK-funktioner (till exempel App Lifecycle, MRT Core, DWriteCore och andra) i din WPF-app. Det här avsnittet visar hur.

Och om du inte redan har ett befintligt WPF-projekt – eller om du vill öva på processen – innehåller det här avsnittet steg för att skapa ett WPF-projekt så att du kan följa med och konfigurera det för att anropa Windows App SDK-API:er.

Förutsättningar

  1. Installera verktyg för Windows App SDK.
  2. Det här avsnittet beskriver både uppackade och paketerade WPF-appar. Om din WPF-app är uppackad (eftersom WPF-appar som standard är uppackade), ska du kontrollera att alla beroenden för uppackade appar är installerade (se Distributionsguide för Windows App SDK för ramverksberoende appar som antingen har paketerats med extern plats eller är uppackade). Ett snabbt sätt att göra det är att besöka Senaste nedladdningarna för Windows App SDK, ladda sedan ner, packa upp och köra en av de stabila versionerna av Runtime-nedladdningarna.

Viktigt!

Versionen av Runtime- som du installerar måste matcha versionen av Microsoft.WindowsAppSDK NuGet-paket som du installerar i ett senare steg.

Mer information om formerna opackade och förpackadefinns i Fördelar och nackdelar med att paketera din app.

Skapa ett WPF-projekt om du inte redan har ett

Om du redan har ett WPF-projekt kan du gå vidare till nästa avsnitt.

  1. I Visual Studio skapar du ett nytt C# WPF-programprojekt (som är ett .NET-projekt). Var noga med att du väljer projektmallen med exakta namnet WPF-applikationoch inte den WPF-appen (.NET Framework).
  2. Ge projektet ett namn och acceptera alla standardalternativ.

Nu har du ett projekt som skapar en uppackad WPF-app.

Konfigurera ditt WPF-projekt för Windows App SDK-stöd

Först redigerar vi projektfilen.

  1. I Solution Explorerhögerklickar du på projektet och väljer Redigera projektfil.

  2. Med det här steget kan du anropa Windows Runtime-API:er (WinRT) (inklusive Windows App SDK-API:er). I elementet PropertyGroup finns elementet TargetFramework, som är inställt på ett värde som net6.0. Lägg till en moniker (specifikt en Target Framework Moniker) till målramverkets värde. Använd till exempel följande om din app riktar sig mot Windows 10, version 2004:

    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    
  3. I elementet PropertyGroup lägger du också till ett RuntimeIdentifiers-element enligt nedan. Om du riktar in dig på .NET 8 eller senare använder du värdet win-x86;win-x64;win-arm64 i stället.

    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    
  4. Som standard är en WPF-app opaketerad (vilket innebär att den inte är installerad med hjälp av MSIX). En uppackad app måste initiera Windows App SDK-körningen innan du använder någon annan funktion i Windows App SDK. Du kan göra det automatiskt när din app startar via automatisk initiering. Du har precis angett (även i elementet PropertyGroup) projektegenskapen WindowsPackageType på rätt sätt, så här:

    <WindowsPackageType>None</WindowsPackageType>
    

    Du kan, istället för att använda automatisk initiering, explicit anropa bootstrapper-API:et om du har avancerade behov (såsom anpassad felhantering eller för att ladda en specifik version av Windows App SDK). För mer information, se Använd Windows App SDK-körningen för appar som paketeras med extern plats eller är opaketerade.

  5. Spara och stäng projektfilen.

NuGet-paketet för Windows App SDK installeras i projektet.

  1. I Solution Explorerhögerklickar du på noden Beroenden i projektet och väljer Hantera Nuget-paket....
  2. I fönstret NuGet Package Manager väljer du fliken Bläddra och installerar Senaste stabilaMicrosoft.WindowsAppSDK--paketet.

Använda vissa Windows App SDK-funktioner i din WPF-app

Det här avsnittet innehåller ett mycket enkelt exempel på hur du anropar Windows App SDK-API:er från en WPF-app. Funktionen MRT Core används (se Hantera resurser med MRT Core). Om det här exemplet fungerar för ditt WPF-projekt (och om du har skapat ett nytt för den här genomgången kommer det att göra det) kan du följa de här stegen.

  1. Lägg till följande markering i MainWindow.xaml (du kan klistra in den i Grid):

    <StackPanel>
        <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button>
        <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock>
    </StackPanel>
    
  2. Nu ska vi lägga till kod som använder klassen ResourceManager i Windows App SDK för att läsa in en strängresurs.

    1. Lägg till ett nytt resursfil (.resw) objekt i projektet (lämna det med standardnamnet Resources.resw).

    2. När resursfilen är öppen i redigeraren skapar du en ny strängresurs med följande egenskaper.

      • Namn: Meddelande
      • Värde: Hej, resurser!
    3. Spara och stäng resursfilen.

    4. I MainWindow.xaml.cslägger du till följande händelsehanterare:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // Construct a resource manager using the resource index generated during build.
        var manager = 
          new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
    
        // Look up a string in the resources file using the string's name.
        myTextBlock.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  3. Skapa projektet och kör appen. Klicka på knappen för att se strängen Hello, resources! visas.

Tips/Råd

Om du vid körningen ser en meddelanderuta som anger att programmet behöver en viss version av Windows App Runtime och frågar om du vill installera den nu klickar du på Ja. Det tar dig till senaste nedladdningar för Windows App SDK. Mer information finns i avsnittet Krav ovan.

Se även Körningsarkitektur för att lära dig mer om Framework paketberoende som din app har när den använder Windows App SDK, och de ytterligare komponenter som krävs för att fungera i en icke-packeterad app.

Paketera och distribuera DIN WPF-app med MSIX

Vissa Windows-funktioner och API:er (inklusive API:er för Windows App SDK--meddelanden) kräver att din app har paketidentitet vid körning (med andra ord måste din app paketeras). Mer information finns i funktioner som kräver paketidentitet.

  1. Högerklicka på lösningen i Solution Explorer i Visual Studio och välj Lägg till>nytt projekt....
  2. I dialogrutan Lägg till ett nytt projekt söker du efter paketering, väljer projektmallen C# Windows Application Packaging Project och klickar på Nästa.
  3. Namnge projektet och klicka på Skapa.
  4. Vi vill ange vilka program i lösningen som ska ingå i paketet. I paketeringsprojektet (inte WPF-projektet) högerklickar du på noden Beroenden och väljer Lägg till projektreferens....
  5. I listan över projekt i lösningen väljer du ditt WPF-projekt och klickar på OK.
  6. Utöka paketeringsprojektets Beroenden>Applikationer noden och bekräfta att WPF-projektet refereras till och markeras i fetstil. Det innebär att det används som utgångspunkt för paketet.
  7. Högerklicka på paketeringsprojektet och välj Ange som startprojekt.
  8. Högerklicka på WPF-projektet och välj Redigera projektfil.
  9. Ta bort <WindowsPackageType>None</WindowsPackageType>, spara och stäng.
  10. I listrutan Lösningsplattformar väljer du x64- (i stället för Alla processorer).
  11. Bekräfta att du kan kompilera och köra.

Nu när du har paketerat WPF-appen kan du anropa API:er som kräver paketidentitet. Så i MainWindow.xaml.csredigerar du händelsehanteraren så att den ser ut så här:

private void Button_Click(object sender, RoutedEventArgs e)
{
    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);
}

Bygg och kör igen. Klicka på knappen och bekräfta att ett toast-meddelande visas. Notifierings-API:erna utlöser ett undantag när de anropas från en process som saknar en paketidentitet under körningen.

Anmärkning

Stegen i det här avsnittet visade dig hur du skapar en paketerad applikation. Ett alternativ är att skapa en paketerad applikation med extern plats. En påminnelse om alla dessa termer finns i Fördelar och nackdelar med att paketera din app.