Delen via


Migratie van vensterfunctionaliteit

Dit onderwerp bevat richtlijnen voor vensterbeheer, waaronder het migreren van UWP's ApplicationView/CoreWindow of AppWindow naar de Window App SDK Microsoft.UI.Windowing.AppWindow.

Belangrijke API's

Overzicht van verschillen tussen API's en/of functies

De Windows App SDK biedt een Microsoft.UI.Windowing.AppWindow klasse die is gebaseerd op het Win32 HWND-model. Deze klasse AppWindow is de Windows App SDK-versie van de ApplicationView/CoreWindow en AppWindow.

Als u wilt profiteren van de Windows App SDK venster-API's, betekent dit dat u uw UWP-code migreert om het Win32-model te gebruiken. Zie voor meer informatie over de Windows App SDK AppWindowBeheer-appvensters.

Aanbeveling

Het onderwerp App-venster beheren bevat een codevoorbeeld waarin wordt gedemonstreerd hoe u een AppWindow kunt ophalen uit een WinUI 3-venster. Gebruik dat codepatroon in uw WinUI-app, zodat u de AppWindow-API's kunt aanroepen die in de rest van dit onderwerp worden genoemd.

Venstertypen in UWP versus de Windows App SDK

In een UWP-app kunt u vensterinhoud hosten met ApplicationView/CoreWindow of AppWindow. Het werk dat betrokken is bij het migreren van die code naar de Windows App SDK is afhankelijk van welke van deze twee venstermodellen uw UWP-app gebruikt. Als u bekend bent met de Windows.UI.WindowManagement.AppWindow van UWP, ziet u mogelijk overeenkomsten tussen dat en Microsoft.UI.Windowing.AppWindow.

Types UWP-vensters

Windows App SDK venstertype

Houd er rekening mee dat de verschillen in venstermodellen tussen UWP en Win32 betekenen dat er geen directe 1:1-toewijzing is tussen de UWP-API-surface en de Windows App SDK-API-surface. Zelfs voor klassen- en ledennamen die overdragen van UWP (weerspiegeld in de toewijzingstabellen van dit onderwerp), kan het gedrag ook verschillen.

Welkomstschermen

In tegenstelling tot UWP-apps geven Win32-apps niet standaard een welkomstscherm weer bij het starten. UWP-apps die afhankelijk zijn van deze functie voor hun startervaring, kunnen ervoor kiezen om een aangepaste overgang naar hun eerste app-venster te implementeren.

Een venster maken, weergeven, sluiten en vernietigen

De levensduur van een Microsoft.UI.Windowing.AppWindow is hetzelfde als voor een HWND; betekent dat het AppWindow-object direct na het maken van het venster beschikbaar is en wordt vernietigd wanneer het venster wordt gesloten.

Maken en weergeven

AppWindow.Create maakt een app-venster met de standaardconfiguratie. Het maken en weergeven van een venster is alleen nodig voor scenario's waarin u niet met een UI-framework werkt. Als u uw UWP-app migreert naar een win32-compatibel UI-framework, kunt u uw AppWindow-object nog steeds bereiken vanuit een al gemaakt venster met behulp van de interoperabiliteitsmethoden voor vensters.

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
CoreApplication.CreateNewView
of
CoreWindow.GetForCurrentThread
AppWindow.TryCreateAsync AppWindow.Create
CoreWindow.Activate AppWindow.TryShowAsync AppWindow.Show

Sluiten

In UWP is ApplicationView.TryConsolidateAsync het programmatische equivalent van de gebruiker die een sluitgebaar initieert. Dit concept van samenvoeging (in UWP's ApplicationView/CoreWindow windowing model) bestaat niet in Win32. Win32 vereist niet dat vensters bestaan in afzonderlijke threads. Als de ontwikkelaar het ApplicationView-venstermodel/van de UWP CoreWindow wilt repliceren, moet hij een nieuwe thread aanmaken en daar een nieuw venster maken. Onder het Win32-model is het standaardsysteemgedrag Close>Hide>Destroy.

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
ApplicationView.TryConsolidateAsync AppWindow.CloseAsync AppWindow.Destroy

Basisvensterpersonalisatie

Wanneer u migreert van UWP naar de Windows App SDK, kunt u dezelfde ervaring verwachten van uw standaard-AppWindow. Maar indien nodig kunt u de standaard microsoft.UI.Windowing.AppWindow wijzigen voor aangepaste vensterervaringen. Zie Microsoft.UI.Windowing.AppWindow voor meer informatie over het aanpassen van uw vensters.

Het formaat van een venster wijzigen

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
ApplicationView.TryResizeView AppWindow.RequestSize AppWindow.Resize
CoreWindow.Bounds (wordt meestal weergegeven in C# als CoreWindow.GetForCurrentThread.Bounds) AppWindowPlacement.Size AppWindow.Size

Een venster positioneren

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
Niet mogelijk AppWindow.GetPlacement AppWindow.Position
Niet mogelijk Appwindow.RequestMoveXxx AppWindow.Move

Venstertitel

UWP ApplicationView/CoreWindow (onderdeel van de Universal Windows Platform) UWP AppWindow Windows App SDK
ApplicationView.Title- AppWindow.Title- AppWindow.Title-

Compacte overlay en volledig scherm

Apps die in compacte overlay of volledig scherm worden ingevoerd, moeten profiteren van de Windows App SDK AppWindowPresenter. Als u bekend bent met de UWP AppWindow, bent u mogelijk al bekend met het concept van presentatoren.

Er is geen 1:1-toewijzing van functionaliteit en gedrag van UWP-apppresentatoren en Windows SDK-appvensterpresentatoren. Als u een UWP ApplicationView/CoreWindow-app hebt, kunt u nog steeds een compacte overlay (afbeelding-in-afbeelding) of vensterervaringen op volledig scherm in uw app hebben, maar het concept van presentatoren is mogelijk nieuw voor u. Voor meer informatie over presentatoren van app-vensters, zie Presentatoren. Standaard wordt een overlappende presentator toegepast op een AppWindow- bij het aanmaken. CompactOverlay en FullScreen zijn de enige beschikbare presentatoren, afgezien van de standaardinstelling.

Compacte overlay

Als u de ApplicationViewMode of AppWindowPresentionKind van UWP hebt gebruikt om een compact overlayvenster te presenteren, moet u de compacte overlay AppWindowPresenterKind gebruiken. Microsoft.UI.Windowing.CompactOverlayPresenter ondersteunt slechts drie vaste venstergrootten met een hoogte-breedteverhouding van 16:9 en kan niet worden gewijzigd door de gebruiker. In plaats van ApplicationViewMode.TryEnterViewModeAsync of AppWindowPresenterKind.RequestPresentation moet u AppWindow.SetPresenter gebruiken om de presentatie van de AppWindow te wijzigen.

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
ApplicationViewMode.CompactOverlay AppWindowPresentationKind.CompactOverlay AppWindowPresenterKind.CompactOverlay
ApplicationView.TryEnterViewModeAsync- met ApplicationViewMode.CompactOverlay- AppWindowPresenter.RequestPresentation- met AppWindowPresenterKind.CompactOverlay- AppWindow.SetPresenter met AppWindowPresenterKind.CompactOverlay

Volledig scherm

Als u de ApplicationViewWindowingMode of AppWindowPresentionKind klassen hebt gebruikt om een volledig schermvenster te presenteren, moet u het volledige scherm gebruiken AppWindowPresenterKind. De Windows App SDK ondersteunt alleen de meest beperkende volledige schermervaring (dat wil gezegd, wanneer FullScreen is IsExclusive). Voor ApplicationView/CoreWindow-kunt u de ApplicationView.ExitFullScreenMode gebruiken om de app uit de volledige schermmodus te halen. Wanneer u presentatoren gebruikt, kunt u een app uit de volledige schermmodus halen door de presentator terug te zetten naar overlappend/standaard met behulp van AppWindow.SetPresenter.

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
ApplicationViewWindowingMode.Volledig scherm AppWindowPresentationKind.FullScreen AppWindowPresenterKind.FullScreen
ApplicationView.TryEnterFullScreenMode AppWindowPresenter.RequestPresentation- met AppWindowPresenterKind.FullScreen AppWindow.SetPresenter- met AppWindowPresenterKind.FullScreen

Zie het voorbeeld van de Windowing-galerie voor meer informatie over het werken met presentatoren voor app-vensters. Het laat zien hoe u verschillende statussen van de presentator van het app-venster kunt in- of uitschakelen.

Aangepaste titelbalk

Opmerking

Api's voor het aanpassen van titelbalken werken momenteel alleen op Windows 11. U wordt aangeraden AppWindowTitleBar.IsCustomizationSupported in uw code te controleren voordat u deze API's aanroept.

Als uw app een standaardtitelbalk gebruikt, is er geen extra werk voor de titelbalk nodig wanneer u migreert naar Win32. Als uw UWP-app daarentegen een aangepaste titelbalk heeft, kunt u de volgende scenario's in uw Windows App SDK-app opnieuw maken.

  1. De door het systeem getekende titelbalk aanpassen
  2. Aangepaste titelbalk getekend door app

Code die gebruikmaakt van de UWP-ApplicationViewTitleBar, CoreApplicationViewTitleBar, en AppWindowTitleBar-klassen worden gemigreerd naar het gebruik van de klasse Windows App SDK Microsoft.UI.Windowing.AppWindowTitleBar.

De door het systeem getekende titelbalk aanpassen

Hier volgt een tabel met de API's voor kleuraanpassing.

Opmerking

Wanneer AppWindowTitleBar.ExtendsContentIntoTitleBar is, wordt truetransparantie alleen ondersteund voor de volgende eigenschappen: AppWindowTitleBar.ButtonBackgroundColor, AppWindowTitleBar.ButtonInactiveBackgroundColor, AppWindowTitleBar.ButtonPressedBackgroundColor, AppWindowTitleBar.ButtonHoverBackgroundColor en AppWindowTitleBar.BackgroundColor (impliciet ingesteld).

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
Eigenschappen van ApplicationViewTitleBar Eigenschappen van AppWindowTitleBar Eigenschappen van AppWindowTitleBar
BackgroundColor BackgroundColor BackgroundColor
KnopAchtergrondkleur KnopAchtergrondkleur KnopAchtergrondkleur
KnopVoorgrondKleur KnopVoorgrondKleur KnopVoorgrondKleur
ButtonHoverBackgroundColor ButtonHoverBackgroundColor ButtonHoverBackgroundColor
ButtonHoverForegroundColor ButtonHoverForegroundColor ButtonHoverForegroundColor
KnoopInactieveAchtergrondkleur KnoopInactieveAchtergrondkleur KnoopInactieveAchtergrondkleur
KnopInactieveVoorgrondkleur KnopInactieveVoorgrondkleur KnopInactieveVoorgrondkleur
KnopIngedrukteAchtergrondkleur KnopIngedrukteAchtergrondkleur KnopIngedrukteAchtergrondkleur
IngedrukteKnopVoorgrondkleur IngedrukteKnopVoorgrondkleur IngedrukteKnopVoorgrondkleur
Voorgrondkleur- Voorgrondkleur- Voorgrondkleur-
InactiveBackgroundColor InactiveBackgroundColor InactiveBackgroundColor
InactiveForegroundColor InactiveForegroundColor InactiveForegroundColor

Deze Windows App SDK API's zijn bedoeld voor verdere aanpassing van de door het systeem getekende titelbalk naast de AppWindow.Title-API.

  • AppWindow.SetIcon. Hiermee stelt u de titelbalk- en taakbalkpictogramafbeelding in met behulp van een hIcon-ingang of een tekenreekspad naar een resource of een bestand.
  • AppWindowTitleBar.IconShowOptions. Hiermee wordt een waarde opgehaald of ingesteld waarmee wordt aangegeven hoe het vensterpictogram wordt weergegeven op de titelbalk. Ondersteunt momenteel twee waarden: HideIconAndSystemMenu en ShowIconAndSystemMenu.
  • AppWindowTitleBar.ResetToDefault. Hiermee stelt u de huidige titelbalk weer in op de standaardinstellingen voor het venster.

App-getekende aangepaste titelbalk (volledig aanpasbaar)

Als u migreert naar het gebruik van AppWindowTitleBar, raden we u aan AppWindowTitleBar.IsCustomizationSupported in uw code te controleren voordat u de volgende aangepaste titelbalk-API's aanroept.

UWP ApplicationView/CoreWindow Windows App SDK AppWindow
CoreApplicationViewTitleBar.ExtendViewIntoTitleBar AppWindowTitleBar.ExtendsContentIntoTitleBar
Het platform blijft de Minimaliseren/Maximaliseren/Sluiten knoppen voor u tekenen en de occlusie-informatie rapporteren.
CoreApplicationViewTitleBar.SystemOverlayLeftInset AppWindowTitleBar.LeftInset
CoreApplicationViewTitleBar.SystemOverlayRightInset AppWindowTitleBar.RightInset
CoreApplicationViewTitleBar.Height (Hoogte van de Titelbalk van CoreApplicationView) AppWindowTitleBar.Height
AppWindowTitleBarOcclusion
AppWindowTitleBar.GetTitleBarOcclusions
Vertegenwoordigt de door het systeem gereserveerde regio's van het app-venster waarmee app-inhoud wordt afgesloten als ExtendsContentIntoTitleBar waar is. De Windows App SDK AppWindow inzetten aan de linker- en rechterzijde, gekoppeld aan de hoogte van de titelbalk, verschaffen dezelfde informatie.
AppWindowTitleBar.LeftInset, AppWindowTitleBar.RightInset, AppWindowTitleBar.Hoogte

Deze Windows App SDK API's zijn bedoeld voor het aanpassen van de volledige titelbalk.

Deze UWP-AppWindow-API's hebben geen directe 1:1-toewijzing aan een Windows App SDK-API.

Raadpleeg voor meer details over het werken met AppWindowTitleBar de Windowing-galerij voorbeeld. Het laat zien hoe u een aangepaste titelbalk met kleuren maakt en hoe u een aangepaste titelbalk tekent.

Gebeurtenisafhandeling

Als uw UWP-app gebruikmaakt van de gebeurtenis AppWindow.Changed , kunt u die code migreren naar de gebeurtenis Microsoft.UI.Windowing.AppWindow.Changed .

Grootte gewijzigd gebeurtenis

Wanneer u code voor het afhandelen van grootteveranderingsevents migreert, moet u overschakelen naar de eigenschap Windows App SDK AppWindowChangedEventArgs.DidSizeChange. De waarde is true als de grootte van het app-venster is gewijzigd, anders is het false.

UWP ApplicationView/CoreWindow UWP AppWindow Windows App SDK
CoreWindow.SizeChanged AppWindowChangedEventArgs.DidSizeChange- AppWindowChangedEventArgs.DidSizeChange-

MainPage en MainWindow

Wanneer u een nieuwe UWP-project maakt in Visual Studio, biedt de project-sjabloon u een MainPage-klasse. Voor uw app hebt u mogelijk de naam van die klasse gewijzigd (en/of meer pagina's en gebruikersbesturingselementen toegevoegd). De project-sjabloon bevat ook navigatiecode in de methoden van de klasse App.

Wanneer u een nieuwe Windows App SDK project maakt in Visual Studio, de project-sjabloon bevat een klasse MainWindow (van het type Microsoft.UI.Xaml.Window), maar geen Page. De project sjabloon bevat geen navigatiecode.

U kunt echter pagina's en gebruikersbesturingselementen toevoegen aan uw Windows App SDK project. U kunt bijvoorbeeld een nieuw pagina-item toevoegen aan de project (WinUI>Blank Page (WinUI)) en deze MainPage.xaml of een andere naam geven. Er zal aan uw project een nieuwe klasse van het type Microsoft.UI.Xaml.Controls.Page worden toegevoegd. Raadpleeg vervolgens Moet ik paginanavigatie implementeren? voor informatie over het toevoegen van navigatiecode aan het project.

Voor Windows App SDK apps die eenvoudig genoeg zijn, hoeft u geen pagina's of gebruikersbesturingselementen te maken en kunt u uw XAML-markeringen en code-achter kopiƫren naar MainWindow. Zie Visual State Manager en Page.Resources voor informatie over uitzonderingen op die werkstroom.

CoreWindow.Dispatcher wijzigen in Window.DispatcherQueue

Sommige gebruiksvoorbeelden voor de Windows.UI.Core.CoreWindow-klasse migreren naar de Windows App SDK Microsoft.UI.Xaml.Window.

Als u bijvoorbeeld de eigenschap Windows.UI.Core.CoreWindow.Dispatcher in uw UWP-app gebruikt, wordt de oplossing niet gemigreerd naar de eigenschap Microsoft.UI.Xaml.Window.Dispatcher (die altijd null retourneert). Migreer in plaats daarvan naar de eigenschap Microsoft.UI.Xaml.Window.DispatcherQueue , die een Microsoft.UI.Dispatching.DispatcherQueue retourneert.

Zie Windows.UI.Core.CoreDispatcher wijzigen in Microsoft.UI.Dispatching.DispatcherQueue voor meer informatie en codevoorbeelden.