Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De Windows App SDK is de volgende evolutie in het ontwikkelplatform voor Windows-apps. In dit onderwerp wordt echter beschreven hoe u Windows App SDK-API's (en Windows Runtime-API's) kunt gebruiken in een WPF-app (Windows Presentation Foundation ).
- In veel gevallen wilt u uw WPF-app opnieuw maken in de vorm van een WinUI 3-app . Een van de voordelen van het overstappen op WinUI 3 is om toegang te krijgen tot het Fluent Design System (zie ook Windows-apps ontwerpen en coden). En WinUI 3 maakt deel uit van de Windows App SDK. Een WinUI 3-app kan dus ook gebruikmaken van de andere Windows App SDK-functies en API's. In dit onderwerp wordt niet beschreven hoe u uw WPF-app migreert naar WinUI 3.
- Maar als u merkt dat u functies van WPF gebruikt die nog niet beschikbaar zijn in WinUI 3, kunt u nog steeds Windows App SDK-functies (zoals app-levenscyclus, MRT Core, DWriteCore en andere) gebruiken in uw WPF-app. In dit onderwerp wordt uitgelegd hoe u dit doet.
En als u nog geen BESTAAND WPF-project hebt, of als u het proces wilt oefenen, bevat dit onderwerp stappen voor het maken van een WPF-project, zodat u dit kunt volgen en configureren om Windows App SDK-API's aan te roepen.
Vereiste voorwaarden
- Hulpprogramma's installeren voor de Windows App SDK-.
- In dit onderwerp worden zowel uitgepakte als verpakte WPF-apps behandeld. Als uw WPF-app is uitgepakt (welke WPF-apps standaard zijn), moet u ervoor zorgen dat alle afhankelijkheden voor uitgepakte apps zijn geïnstalleerd (zie de Windows App SDK-implementatiehandleiding voor frameworkafhankelijke apps die zijn verpakt met externe locatie of uitgepakt). Een snelle manier om dat te doen is om de nieuwste downloads voor de Windows App SDKte bezoeken, vervolgens een van de stabiele versie Runtime-downloadste downloaden, uit te pakken en uit te voeren.
Belangrijk
De versie van de runtime die u installeert, moet overeenkomen met de versie van het NuGet-pakket Microsoft.WindowsAppSDK dat u in een latere stap gaat installeren.
Voor meer informatie over de termen ongepakt en verpakt, zie Voordelen en nadelen van het verpakken van uw app.
Een WPF-project maken als u er nog geen hebt
Als u al een WPF-project hebt, kunt u verdergaan met de volgende sectie.
- Maak in Visual Studio een nieuw C# WPF-toepassingsproject (een .NET-project). Zorg ervoor dat u de projectsjabloon kiest met de exacte naam WPF-toepassing en niet de WPF-app (.NET Framework).
- Geef het project een naam en accepteer alle standaardopties.
U hebt nu een project dat een uitgepakte WPF-app bouwt.
Uw WPF-project configureren voor Windows App SDK-ondersteuning
Eerst gaan we het projectbestand bewerken.
Klik in Solution Explorer met de rechtermuisknop op uw project en kies Projectbestand bewerken.
Met deze stap kunt u WinRT-API's (Windows Runtime) aanroepen (inclusief Windows App SDK-API's). Binnen het PropertyGroup-element bevindt zich het TargetFramework-element, dat is ingesteld op een waarde zoals net6.0. Voeg een moniker toe aan die doelraamwerkwaarde, specifiek een Target Framework Moniker. Gebruik bijvoorbeeld het volgende als uw app is gericht op Windows 10, versie 2004:
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>Voeg ook in het Element PropertyGroup een RuntimeIdentifiers-element toe, zoals hieronder wordt weergegeven. Als u zich richt op .NET 8 of hoger, gebruikt u in plaats daarvan de waarde
win-x86;win-x64;win-arm64.<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>Standaard wordt een WPF-app uitgepakt (wat betekent dat deze niet is geïnstalleerd met behulp van MSIX). Een uitgepakte app moet de Windows App SDK-runtime initialiseren voordat u een andere functie van de Windows App SDK gebruikt. U kunt dit automatisch doen wanneer uw app wordt gestart via automatische initialisatie. U hebt zojuist (ook in het element PropertyGroup) de
WindowsPackageTypeprojecteigenschap passend ingesteld, als volgt:<WindowsPackageType>None</WindowsPackageType>Als u geavanceerde behoeften hebt (zoals aangepaste foutafhandeling of als u een specifieke versie van de Windows App SDK wilt laden), kunt u in plaats van auto-initialisatie de bootstrapper-API expliciet aanroepen. Zie De Windows App SDK-runtime gebruiken voor apps die zijn verpakt met externe locatie of uitgepakt.
Sla het projectbestand op en sluit het.
Vervolgens installeren we het NuGet-pakket van de Windows App SDK in het project.
- Klik in Solution Explorermet de rechtermuisknop op het knooppunt afhankelijkheden van uw project en kies NuGet-pakketten beheren....
- Selecteer in het venster NuGet Package Manager het tabblad Bladeren en installeer het meest recente stabieleMicrosoft.WindowsAppSDK-pakket.
Sommige Windows App SDK-functies gebruiken in uw WPF-app
Deze sectie biedt een zeer eenvoudig voorbeeld van het aanroepen van Windows App SDK-API's vanuit een WPF-app. De functie MRT Core wordt gebruikt (zie Resources beheren met MRT Core). Als dit voorbeeld werkt voor uw WPF-project (en als u een nieuw project hebt gemaakt voor dit scenario, dan wel), kunt u deze stappen volgen.
Voeg de volgende markeringen toe aan
MainWindow.xaml(u kunt ze binnen de root Gridplakken):<StackPanel> <Button HorizontalAlignment="Center" Click="Button_Click">Click me!</Button> <TextBlock HorizontalAlignment="Center" x:Name="myTextBlock">Hello, World!</TextBlock> </StackPanel>Nu voegen we code toe die gebruikmaakt van de ResourceManager-klasse in de Windows App SDK om een tekenreeksresource te laden.
Voeg een nieuw resourcebestand (.resw)- item toe aan uw project (laat dit staan met de standaardnaam Resources.resw).
Wanneer het resourcesbestand in de editor is geopend, maakt u een nieuwe string resource met de volgende eigenschappen.
- Naam: bericht
- Waarde: Hallo, bronnen!
Sla het resourcesbestand op en sluit het.
Voeg in
MainWindow.xaml.csde volgende eventhandler toe:
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; }Bouw het project en voer de app uit. Klik op de knop om de tekenreeks
Hello, resources!te zien.
Aanbeveling
Als u tijdens runtime een berichtvenster ziet waarin wordt aangegeven dat de toepassing een bepaalde versie van De Windows App Runtime nodig heeft en u wordt gevraagd of u deze nu wilt installeren, klikt u op Ja. Hiermee gaat u naar nieuwste downloads voor de Windows App SDK. Zie de sectie Vereisten hierboven voor meer informatie.
Zie ook Runtime-architectuur voor meer informatie over de afhankelijkheid van het Framework-pakket, dat uw app nodig heeft wanneer deze gebruikmaakt van de Windows App SDK, en de extra onderdelen die nodig zijn om in een uitgepakte app te werken.
Uw WPF-app verpakken en implementeren met MSIX
Voor sommige Windows-functies en API's (waaronder de Windows App SDK meldingen-API's) moet uw app tijdens uitvoeringstijd een pakketidentiteit hebben (met andere woorden, uw app moet verpakt zijn). Zie voor meer informatie functies waarvoor pakketidentiteitis vereist.
- Klik in Solution Explorer in Visual Studio met de rechtermuisknop op de oplossing en kiesNieuw project>....
- Zoek in het dialoogvenster Een nieuw project toevoegen naar packaging, kies het C# Windows Application Packaging Project sjabloon en klik op Volgende.
- Geef het project een naam en klik op Aanmaken.
- We willen opgeven welke toepassingen in de oplossing moeten worden opgenomen in het pakket. Klik dus in het verpakkingsproject (niet het WPF-project) met de rechtermuisknop op het knooppunt Afhankelijkheden en kies Projectverwijzing toevoegen....
- Kies uw WPF-project in de lijst met projecten in de oplossing en klik op OK.
- Vouw de afhankelijkheden van het pakketproject uit>Applications node en controleer of er naar uw WPF-project wordt verwezen en vetgedrukt is gemarkeerd. Dit betekent dat het wordt gebruikt als uitgangspunt voor het pakket.
- Klik met de rechtermuisknop op het verpakkingsproject en kies Set As Startup Project.
- Klik met de rechtermuisknop op het WPF-project en kies Projectbestand bewerken.
- Verwijder
<WindowsPackageType>None</WindowsPackageType>, sla op en sluit. - Kies in de vervolgkeuzelijst Oplossingsplatforms, x64 (in plaats van Any CPU).
- Controleer of u kunt bouwen en uitvoeren.
Nu u uw WPF-app hebt verpakt, kunt u API's aanroepen waarvoor pakketidentiteit is vereist. Bewerk in MainWindow.xaml.csde evenementenhandler om er zo uit te zien:
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);
}
Opnieuw bouwen en uitvoeren. Klik op de knop en controleer of er een toastmelding wordt weergegeven. Wanneer deze wordt aangeroepen vanuit een proces dat tijdens runtime geen pakketidentiteit heeft, genereren de meldingen-API's een uitzondering.
Opmerking
In de stappen in deze sectie hebt u gezien hoe u een verpakte appkunt maken. Een alternatief is het maken van een verpakte app met externe locatie. Zie voor een herinnering aan al deze voorwaarden de voor- en nadelen van het verpakken van uw app.
Verwante onderwerpen
- Windows Presentation Foundation (WPF)
- Hulpprogramma's installeren voor de Windows App SDK
- Implementatiehandleiding voor Windows App SDK voor frameworkafhankelijke apps die zijn verpakt met externe locatie of uitgepakt
- Meest recente downloads voor de Windows App SDK
- Voordelen en nadelen van het verpakken van uw app
- De Windows App SDK-runtime gebruiken voor apps die zijn verpakt met een externe locatie of uitgepakt
- Runtime-architectuur
- Functies waarvoor pakketidentiteit is vereist
Windows developer