Migration von Fensterfunktionen

Dieses Thema enthält Anleitungen zur Fensterverwaltung, u. a. zur Migration der UWP-Klasse ApplicationView/CoreWindow oder AppWindow zur Klasse Microsoft.UI.Windowing.AppWindow des Windows App SDK.

Wichtige APIs

Zusammenfassung der API- und/oder Funktionsunterschiede

Das Windows App SDK stellt die Klasse Microsoft.UI.Windowing.AppWindow bereit, die auf dem Win32-HWND-Modell basiert. Diese AppWindow-Klasse ist die Windows App SDK-Version von ApplicationView/CoreWindow und AppWindow der UWP.

Um die Vorteile der Windows App SDK-Fenster-APIs nutzen zu können, müssen Sie Ihren UWP-Code auf das Win32-Modell umstellen. Weitere Informationen zur AppWindow-Klasse des Windows App SDK finden Sie unter Verwalten von App-Fenstern (Windows App SDK).

Tipp

Das Thema Verwalten von App-Fenstern (Windows App SDK) enthält ein Codebeispiel, das veranschaulicht, wie eine AppWindow-Klasse aus einem WinUI 3-Fenster abgerufen wird. Verwenden Sie in Ihrer WinUI 3-App dieses Codemuster, damit Sie die AppWindow-APIs aufrufen können, die im weiteren Verlauf dieses Themas erwähnt werden.

Fenstertypen der UWP und des Windows App SDK im Vergleich

In einer UWP-App können Sie Fensterinhalte mithilfe von ApplicationView/CoreWindow oder AppWindow hosten. Die Schritte für die Migration dieses Codes zum Windows App SDK hängen davon ab, welches dieser beiden Fenstermodelle Ihre UWP-App verwendet. Wenn Sie mit der UWP-Klasse Windows.UI.WindowManagement.AppWindow vertraut sind, erkennen Sie möglicherweise Ähnlichkeiten zwischen dieser Klasse und Microsoft.UI.Windowing.AppWindow.

UWP-Fenstertypen

Windows App SDK-Fenstertyp

Beachten Sie, dass die Unterschiede in den Fenstermodellen zwischen UWP und Win32 dazu führen, dass es keine direkte 1:1-Zuordnung zwischen der UWP-API-Oberfläche und der Windows App SDK-API-Oberfläche gibt. Selbst bei Klassen- und Membernamen, die von UWP übernommen werden (was sich in den Zuordnungstabellen dieses Themas widerspiegelt), kann sich das Verhalten ebenfalls unterscheiden.

Begrüßungsbildschirme

Im Gegensatz zu UWP-Apps wird bei Win32-Apps beim Start standardmäßig kein Begrüßungsbildschirm angezeigt. UWP-Apps, die dieses Feature für ihre Starterfahrung nutzen, können einen benutzerdefinierten Übergang zu ihrem ersten App-Fenster implementieren.

Erstellen, Anzeigen, Schließen und Löschen eines Fensters

Die Lebensdauer eines Microsoft.UI.Windowing.AppWindow-Objekts ist identisch mit der für ein HWND. Das bedeutet, dass das AppWindow-Objekt unmittelbar nach dem Erstellen des Fensters verfügbar ist und beim Schließen des Fensters gelöscht wird.

Erstellen und Anzeigen

AppWindow.Create erstellt ein App-Fenster mit der Standardkonfiguration. Das Erstellen und Anzeigen eines Fensters ist nur für Szenarien erforderlich, in denen kein Benutzeroberflächenframework verwendet wird. Wenn Sie Ihre UWP-App zu einem Win32-kompatiblen Benutzeroberflächenframework migrieren, können Sie das AppWindow-Objekt dennoch über ein bereits erstelltes Fenster erreichen, indem Sie die Interop-Methoden für Fenster verwenden.

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

Schließen

Auf der UWP ist ApplicationView.TryConsolidateAsync die programmgesteuerte Entsprechung zu einer von Benutzer*innen initiierten Geste zum Schließen. Dieses Konsolidierungskonzept (im ApplicationView-/CoreWindow-Fenstermodell der UWP) ist in Win32 nicht vorhanden. Win32 erfordert nicht, dass Fenster in separaten Threads vorhanden sind. Zum Replizieren des ApplicationView-/CoreWindow-Fenstermodells der UWP müssen Entwickler*innen einen neuen Thread und dort ein neues Fenster erstellen. Im Win32-Modell ist das Standardsystemverhalten Schließen>Ausblenden>Löschen.

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

Grundlegende Fensteranpassung

Wenn Sie von der UWP zum Windows App SDK migrieren, können Sie die gleiche Umgebung wie bei der AppWindow-Standardklasse erwarten. Bei Bedarf können Sie jedoch die Standardklasse Microsoft.UI.Windowing.AppWindow für angepasste Fensterumgebungen ändern. Weitere Informationen zum Anpassen Ihrer Fenster finden Sie unter Microsoft.UI.Windowing.AppWindow.

Ändern der Fenstergröße

UWP ApplicationView/CoreWindow UWP AppWindow Windows-App-SDK
ApplicationView.TryResizeView AppWindow.RequestSize AppWindow.Resize
CoreWindow.Bounds (wird in C# häufig als CoreWindow.GetForCurrentThread.Bounds angezeigt) AppWindowPlacement.Size AppWindow.Size

Positionieren eines Fensters

UWP ApplicationView/CoreWindow UWP AppWindow Windows-App-SDK
Nicht möglich AppWindow.GetPlacement AppWindow.Position
Nicht möglich Appwindow.RequestMoveXxx AppWindow.Move

Fenstertitel

UWP ApplicationView/CoreWindow UWP AppWindow Windows-App-SDK
ApplicationView.Title AppWindow.Title AppWindow.Title

Kompakte Überlagerung und Vollbild

Apps, die in die kompakte Überlagerung oder in den Vollbildmodus wechseln, sollten AppWindowPresenter des Windows App SDK nutzen. Wenn Sie mit der UWP-Klasse AppWindow vertraut sind, kennen Sie möglicherweise bereits das Konzept von Referenten.

Es gibt keine 1:1-Zuordnung von Funktionen und Verhalten der Referenten für UWP-App-Fenster zu Referenten für Windows App SDK-App-Fenster. Wenn Sie über eine UWP-App für ApplicationView/CoreWindow verfügen, können Sie weiterhin Fensterumgebungen mit kompakter Überlagerung (Bild im Bild) oder Vollbildmodus in Ihrer App verwenden, aber das Konzept von Referenten ist möglicherweise neu für Sie. Weitere Informationen zu App-Fenster-Referenten finden Sie unter Verwalten von App-Fenstern (Windows App SDK). Bei der Erstellung wird standardmäßig ein überlappender Referent auf AppWindow angewendet. CompactOverlay und FullScreen sind neben der Standardeinstellung die einzigen verfügbaren Referenten.

Kompakte Überlagerung

Wenn Sie die UWP-Klasse ApplicationViewMode oder AppWindowPresentionKind zum Darstellen eines Fensters mit kompakter Überlagerung verwendet haben, sollten Sie das AppWindowPresenterKind-Element für die kompakte Überlagerung nutzen. Microsoft.UI.Windowing.CompactOverlayPresenter unterstützt nur drei feste Fenstergrößen mit dem Seitenverhältnis 16:9, und die Größe kann von Benutzer*innen nicht geändert werden. Anstelle von ApplicationViewMode.TryEnterViewModeAsync oder AppWindowPresenterKind.RequestPresentation sollten Sie AppWindow.SetPresenter verwenden, um die Darstellung von AppWindow zu ändern.

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

Vollbild

Wenn Sie die UWP-Klasse ApplicationViewWindowingMode oder AppWindowPresentionKind verwendet haben, um ein Vollbildfenster anzuzeigen, sollten Sie das Element AppWindowPresenterKind für den Vollbildmodus nutzen. Das Windows App SDK unterstützt nur die restriktivste Vollbilddarstellung (d. h. FullScreen ist IsExclusive). Für ApplicationView/CoreWindow können Sie ApplicationView.ExitFullScreenMode verwenden, um den Vollbildmodus für die App zu beenden. Wenn Sie Referenten verwenden, können Sie den Vollbildmodus für eine App beenden, indem Sie den Referenten mithilfe von AppWindow.SetPresenter wieder auf „overlapped“ (Überlappung) oder auf die Standardeinstellung festlegen.

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

Weitere Informationen zum Arbeiten mit Referenten für App-Fenster finden Sie im Fensterkatalogbeispiel. Es veranschaulicht, wie verschiedene Zustände von App-Fensterreferenten umgeschaltet werden.

Benutzerdefinierte Titelleiste

Hinweis

Titelleistenanpassungs-APIs können derzeit nur unter Windows 11 verwendet werden. Es wird empfohlen, AppWindowTitleBar.IsCustomizationSupported in Ihrem Code zu prüfen, bevor Sie diese APIs aufrufen.

Wenn Ihre App eine Standardtitelleiste verwendet, sind bei der Migration zu Win32 keine zusätzlichen Schritte für die Titelleiste erforderlich. Wenn Ihre UWP-App hingegen über eine benutzerdefinierte Titelleiste verfügt, können Sie die folgenden Szenarien in Ihrer Windows App SDK-App nachstellen:

  1. Anpassen der vom System gezeichneten Titelleiste
  2. Von der App gezeichnete benutzerdefinierte Titelleiste

Code, der die UWP-Klassen ApplicationViewTitleBar, CoreApplicationViewTitleBar und AppWindowTitleBar verwendet, wird auf die Verwendung der Windows App SDK-Klasse Microsoft.UI.Windowing.AppWindowTitleBar umgestellt.

Anpassen der vom System gezeichneten Titelleiste

Im Anschluss finden Sie eine Tabelle mit den Farbanpassungs-APIs.

Hinweis

Wenn true für AppWindowTitleBar.ExtendsContentIntoTitleBar festgelegt ist, wird Transparenz nur für die folgenden Eigenschaften unterstützt: AppWindowTitleBar.ButtonBackgroundColor, AppWindowTitleBar.ButtonInactiveBackgroundColor, AppWindowTitleBar.ButtonPressedBackgroundColor, AppWindowTitleBar.ButtonHoverBackgroundColor und AppWindowTitleBar.BackgroundColor (implizit festgelegt).

UWP ApplicationView/CoreWindow UWP AppWindow Windows-App-SDK
Eigenschaften von ApplicationViewTitleBar Eigenschaften von AppWindowTitleBar Eigenschaften von AppWindowTitleBar
BackgroundColor BackgroundColor BackgroundColor
ButtonBackgroundColor ButtonBackgroundColor ButtonBackgroundColor
ButtonForegroundColor ButtonForegroundColor ButtonForegroundColor
ButtonHoverBackgroundColor ButtonHoverBackgroundColor ButtonHoverBackgroundColor
ButtonHoverForegroundColor ButtonHoverForegroundColor ButtonHoverForegroundColor
ButtonInactiveBackgroundColor ButtonInactiveBackgroundColor ButtonInactiveBackgroundColor
ButtonInactiveForegroundColor ButtonInactiveForegroundColor ButtonInactiveForegroundColor
ButtonPressedBackgroundColor ButtonPressedBackgroundColor ButtonPressedBackgroundColor
ButtonPressedForegroundColor ButtonPressedForegroundColor ButtonPressedForegroundColor
ForegroundColor ForegroundColor ForegroundColor
InactiveBackgroundColor InactiveBackgroundColor InactiveBackgroundColor
InactiveForegroundColor InactiveForegroundColor InactiveForegroundColor

Diese Windows App SDK-APIs dienen neben der AppWindow.Title-API zur weiteren Anpassung der vom System gezeichneten Titelleiste.

  • AppWindow.SetIcon. Legt die Titelleiste und das Symbolbild der Taskleiste mithilfe eines hicon-Handles oder eines Zeichenfolgenpfads zu einer Ressource oder einer Datei fest.
  • AppWindowTitleBar.IconShowOptions. Ruft einen Wert ab, der angibt, wie das Fenstersymbol auf der Titelleiste angezeigt wird, oder legt diesen fest. Unterstützt derzeit zwei Werte: HideIconAndSystemMenu und ShowIconAndSystemMenu.
  • AppWindowTitleBar.ResetToDefault. Setzt die aktuelle Titelleiste wieder auf die Standardeinstellungen für das Fenster zurück.

Vom App gezeichnete benutzerdefinierte Titelleiste (vollständige Anpassung)

Wenn Sie zu AppWindowTitleBar migrieren, empfiehlt es sich, AppWindowTitleBar.IsCustomizationSupported in Ihrem Code zu prüfen, bevor Sie die folgenden benutzerdefinierten Titelleisten-APIs aufrufen:

UWP ApplicationView/CoreWindow Windows App SDK AppWindow
CoreApplicationViewTitleBar.ExtendViewIntoTitleBar AppWindowTitleBar.ExtendsContentIntoTitleBar
Die Plattform zeichnet weiterhin die Schaltflächen Minimieren/Maximieren/Schließen für Sie und meldet die Informationen zur Verdeckung.
CoreApplicationViewTitleBar.SystemOverlayLeftInset AppWindowTitleBar.LeftInset
CoreApplicationViewTitleBar.SystemOverlayRightInset AppWindowTitleBar.RightInset
CoreApplicationViewTitleBar.Height AppWindowTitleBar.Height
AppWindowTitleBarOcclusion
AppWindowTitleBar.GetTitleBarOcclusions
Stellt die vom System reservierten Bereiche des App-Fensters dar, die App-Inhalte verdecken, wenn ExtendsContentIntoTitleBar auf „true“ festgelegt ist. Die Angaben zur linken und rechten Einblendung von Windows App SDK AppWindow in Verbindung mit der Titelleistenhöhe bieten die gleichen Informationen.
AppWindowTitleBar.LeftInset, AppWindowTitleBar.RightInset, AppWindowTitleBar.Height

Diese Windows App SDK-APIs dienen zur vollständigen Anpassung der Titelleiste.

Diese UWP-AppWindow-APIs verfügen über keine direkte 1:1-Zuordnung zu einer Windows App SDK-API.

Weitere Informationen zum Arbeiten mit AppWindowTitleBar finden Sie im Fensterkatalogbeispiel. Es veranschaulicht, wie Sie eine Titelleiste mit benutzerdefinierter Farbe erstellen und eine benutzerdefinierte Titelleiste zeichnen.

Ereignisbehandlung

Wenn Ihre UWP-App das Ereignis AppWindow.Changed verwendet, können Sie diesen Code zum Ereignis Microsoft.UI.Windowing.AppWindow.Changed migrieren.

Ereignis vom Typ „Größe geändert“

Beim Migrieren von Code zur Behandlung von Ereignissen des Typs „Größe geändert“ sollten Sie zur Verwendung der Windows App SDK-Eigenschaft AppWindowChangedEventArgs.DidSizeChange wechseln. Der Wert ist true, wenn sich die Größe des App-Fensters geändert hat, andernfalls false.

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

MainPage und MainWindow

Wenn Sie ein neues UWP-Projekt in Visual Studio erstellen, stellt Ihnen die Projektvorlage eine MainPage-Klasse zur Verfügung. Für Ihre App haben Sie diese Klasse möglicherweise umbenannt (und/oder weitere Seiten und Benutzersteuerelemente hinzugefügt). Die Projektvorlage stellt darüber hinaus Navigationscode in den Methoden der App-Klasse bereit.

Wenn Sie ein neues Windows App SDK-Projekt in Visual Studio erstellen, stellt Ihnen die Projektvorlage eine MainWindow-Klasse (vom Typ Microsoft.UI.Xaml.Window) aber keine Page-Klasse zur Verfügung. Darüber hinaus enthält die Projektvorlage keinen Navigationscode.

Sie haben jedoch die Möglichkeit, Ihrem Windows App SDK-Projekt Seiten und Benutzersteuerelemente hinzuzufügen. Beispielsweise können Sie dem Projekt ein neues Seitenelement (WinUI>Leere Seite (WinUI 3)) hinzufügen und ihm den Namen MainPage.xaml oder einen anderen Namen geben. Dadurch wird Ihrem Projekt eine neue Klasse vom Typ Microsoft.UI.Xaml.Controls.Page hinzugefügt. Informationen zum Hinzufügen von Navigationscode zum Projekt finden Sie unter Muss ich die Seitennavigation implementieren?.

Für Windows App SDK-Apps, die einfach genug sind, müssen Sie keine Seiten oder Benutzersteuerelemente erstellen, und Sie können XAML-Markup und CodeBehind in MainWindow kopieren. Weitere Informationen zu Ausnahmen für diesen Workflow finden Sie unter Visual State Manager und Page.Resources.

Ändern sie CoreWindow.Dispatcher in Window.DispatcherQueue

Einige Anwendungsfälle für die UWP-Klasse Windows.UI.Core.CoreWindow werden zur Windows App SDK-Klasse Microsoft.UI.Xaml.Window-Klasse migriert.

Wenn Sie beispielsweise die Eigenschaft Windows.UI.Core.CoreWindow.Dispatcher in Ihrer UWP-App verwenden, besteht die Lösung nicht darin, zur Eigenschaft Microsoft.UI.Xaml.Window.Dispatcher zu migrieren. (Dabei wird immer NULL zurückgegeben.) Migrieren Sie stattdessen zur Eigenschaft Microsoft.UI.Xaml.Window.DispatcherQueue, die Microsoft.UI.Dispatching.DispatcherQueue zurückgibt.

Weitere Informationen und Codebeispiele finden Sie unter Change Windows.UI.Core.CoreDispatcher to Microsoft.UI.Dispatching.DispatcherQueue (Ändern von Windows.UI.Core.CoreDispatcher in Microsoft.UI.Dispatching.DispatcherQueue.