Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Windows App SDK är nästa utveckling i Windows apputvecklingsplattform. Men det här avsnittet visar hur du kan använda Windows App SDK API:er (och Windows Runtime API:er) i en Windows Presentation Foundation (WPF) app!
- I många fall vill du återskapa din WPF app i form av en WinUI 3 app. En av fördelarna med att flytta till WinUI är att ha åtkomst till Fluent Design System (se även Design och kod Windows appar). Och WinUI är en del av Windows App SDK, så naturligtvis kan en WinUI-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.
- Men om du upptäcker att du använder funktioner i WPF som ännu inte är tillgängliga i WinUI kan du fortfarande använda Windows App SDK funktioner (till exempel applivscykel, 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
- Installera verktyg för Windows App SDK.
- Det här avsnittet beskriver både WPF-appar utan paket och med paket. Om din WPF-app är opaketerad (vilket WPF-appar är som standard) måste du kontrollera att alla beroenden för opaketerade appar är installerade (se Windows App SDK distributionsguide för ramverksberoende appar som är paketerade med extern plats eller opaketerade). Ett snabbt sätt att göra det är att besöka Senaste nedladdningar för Windows App SDK, sedan ladda ner, packa upp och köra en av de stabila versionerna Runtime-nedladdningar.
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.
- I Visual Studio skapar du ett nytt C# WPF Application-projekt (som är ett .NET projekt). Var försiktig så att du väljer projektmallen med det exakta namnet WPF Application och inte WPF App (.NET Framework) en.
- Ge project ett namn och godkänn alla standardalternativ.
Nu har du ett projekt som bygger en icke-packeterad WPF-app.
Konfigurera ditt WPF projekt för stöd för Windows App SDK
Först redigerar vi projektfilen.
Högerklicka på project i Prieskumník riešení och välj Redigera Project Fil.
Med det här steget kan du anropa API:er för Windows Runtime (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>I elementet PropertyGroup lägger du också till elementet RuntimeIdentifiers enligt nedan. Om du riktar in dig på .NET 8 eller senare använder du värdet
win-x86;win-x64;win-arm64i stället.<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>Som standard är en WPF-app opackad (vilket innebär att den inte installeras med hjälp av MSIX). En app utan förpackning måste initiera Windows App SDK körtid innan man 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 egenskapen projektegenskap (även i
WindowsPackageType-elementet) på rätt sätt, så här:<WindowsPackageType>None</WindowsPackageType>Om du har avancerade behov (till exempel anpassad felhantering, eller för att läsa in en specifik version av Windows App SDK) kan du i stället för auto-initiering anropa bootstrapper-API:et explicit– mer information finns i Använd Windows App SDK körning för appar som paketeras med extern plats eller packas upp.
Spara och stäng projektfilen.
Därefter ska vi installera Windows App SDK NuGet-paketet i projektet.
- I Prieskumník riešení högerklickar du på noden Dependencies i projektet och väljer Hantera Nuget-paket... .
- I fönstret NuGet Správca balíkov väljer du fliken Browse och installerar Latest stableMicrosoft. WindowsAppSDK paket.
Använd 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 dessa steg.
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>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.
Lägg till ett nytt Resources-fil (.resw) objekt i project (lämna det med standardnamnet Resources.resw).
När resursfilen är öppen i redigeraren skapar du en ny strängresurs med följande egenskaper.
- Namn: Meddelande
- Värde: Hej, resurser!
Spara och stäng resursfilen.
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; }Skapa project 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å Yes. Det tar dig till Senaste nedladdningar för Windows App SDK. Mer information finns i avsnittet Krav ovan.
Läs också Runtime-arkitektur för att lära dig mer om paketberoendet Framework som appen behöver när den använder Windows App SDK och de ytterligare komponenter som krävs för att fungera i en uppackad app.
Paketera och distribuera din WPF-app med MSIX
Vissa Windows funktioner och API:er kräver att appen har package-identitet vid körning (med andra ord måste appen vara packaged). Mer information finns i funktioner som kräver paketidentitet. MSIX-paketering krävs också för MSIX-baserade inlämningar till Microsoft Store.
- I Prieskumník riešení i Visual Studio högerklickar du på lösningen och väljer Lägg till>Ny Project... .
- I dialogrutan Lägg till en ny project sök efter packaging, välj mallen C# Windows Application Packaging Project project och klicka på Nästa.
- Ge project namnet och klicka på Skapa.
- Vi vill ange vilka program i lösningen som ska ingå i paketet. I paketeringsprojektet (not WPF-projektet) högerklickar du på noden Dependencies och väljer Lägg till projektreferens....
- I listan över projekt i lösningen väljer du ditt WPF projekt och klickar på OK.
- Expandera paketeringsprojektets Dependencies>Applications nod och bekräfta att ditt WPF projekt refereras till och markeras i fetstil. Det innebär att det används som utgångspunkt för paketet.
- Högerklicka på paketeringsprojektet och välj Ange som startprojekt.
- Högerklicka på WPF project och välj Edit Project File.
- Ta bort
<WindowsPackageType>None</WindowsPackageType>, spara och stäng. - I listrutan Lösningsplattformar väljer du x64- (i stället för Alla processorer).
- Bekräfta att du kan kompilera och köra.
Nu när du har paketerat din WPF app 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.
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.
Kör kod i bakgrunden
För WPF appar som behöver köra kod när appen inte körs finns det tre metoder beroende på din paketering och arbetsbelastning:
| Tillvägagångssätt | Paketering krävs | Passar bäst för |
|---|---|---|
| Windows App SDK bakgrundsaktiviteter | Ja (MSIX) | Energieffektiva systemhanterade utlösare (tid/system) |
| Aktivitetsschemaläggare | No | Periodisk synkronisering, uppackade appar |
| .NET Worker Services | No | Långvariga huvudlösa arbetsbelastningar, alla distributionsmodeller |
För Windows App SDK bakgrundsaktiviteter registrerar din WPF-app en COM-komponent med BackgroundTaskBuilder precis som en WinUI 3-app – händelsen Application.Startup i WPF mappar till den roll som App.OnLaunched spelar i WinUI 3. Mer information finns i Använda bakgrundsaktiviteter i Windows appar.
Anmärkning
Windows App SDK bakgrundsaktiviteter kräver MSIX-paketering. För uppackade WPF-appar använder du Aktivitetsschemaläggaren eller .NET Worker Services i stället.
Relaterade ämnen
- Windows Presentation Foundation (WPF)
- Installera verktyg för Windows App SDK
- Windows App SDK utrullningsguide för ramverksberoende applikationer som paketeras vid en extern plats eller är opaketerade
- Senaste nedladdningar för Windows App SDK
- Fördelar och nackdelar med att paketera din app
- Använd Windows App SDK-runtime-miljön för appar som är paketerade med extern plats eller opacketerade
- Körningsarkitektur
- funktioner som kräver paketidentitet
Windows developer