Ein Windows-Programm wird dadurch zu einem, dass es sich so verhält, wie Menschen es von Windows gewohnt sind: Das Fenster steht beim nächsten Start dort, wo es zuletzt stand. Die Titelleiste passt zur Oberfläche. Eine Datei wählt man im vertrauten Dialog. Ein zweiter Klick auf das Symbol holt das erste Fenster nach vorn, statt ein zweites Programm zu starten. Und eine Erinnerung erscheint am Bildschirmrand, auch wenn ein anderes Fenster oben liegt.

Diese Lektion baut diese fünf Dinge in die Kladde ein. Sie hält die Regel aus Lektion 0201: Was Regeln enthält, steht in Kladde.Desktop.Logic und hat xUnit-Tests; was das Windows App SDK aufruft, bleibt dünn in Kladde.Desktop. Passen Sie die Namen an Ihre Projekte an. Die Seiten und ViewModels der Lektionen 0101 bis 0202 setzt die Lektion voraus.

Stand der Prüfung. Alles, was das Windows App SDK aufruft (Fenster, Titelleiste, Auswahldialoge, Aktivierung, Benachrichtigung, Manifest), stammt aus Microsoft Learn und seinen Beispielen und wurde nicht ausgeführt: Beim Schreiben stand kein Windows-Rechner mit WinUI-Werkzeugen zur Verfügung, und kein Fenster und keine Benachrichtigung wurden gesehen. Übersetzt und getestet wurden in einem Wegwerfprojekt mit .NET 10 und xUnit die reinen Klassen der Lektion (WindowPlacementRules, WindowPlacementJson, ReminderPlanner, AppointmentCsv) mit ihren Tests. Wo eine Quelle etwas offenlässt, steht offen im Text. Vergleichen Sie jede Stelle mit der verlinkten Seite und spielen Sie die Übungen auf einem Windows-Rechner durch.

Window und AppWindow

Ein Fenster hat zwei Gesichter. Microsoft.UI.Xaml.Window legen Sie mit new MainWindow() an; daran hängen der Inhalt und die Befehle Activate() und Close(). Microsoft.UI.Windowing.AppWindow gehört zum Windows App SDK und verwaltet, was am Fenster selbst hängt: Größe, Position, Titelleiste, Symbol und die Darstellung (normal, bildschirmfüllend, kleines schwebendes Fenster). Beide beschreiben dasselbe Win32-Fenster, das HWND; Learn nennt es eine Eins-zu-eins-Zuordnung. Das AppWindow holen Sie aus dem Window:

C#
AppWindow appWindow = this.AppWindow;   // in MainWindow.xaml.cs

Von einer Page aus haben Sie das Window nicht. Die Kladde merkt es sich in einer statischen Eigenschaft (public static MainWindow? MainWindowInstance { get; private set; } in App).

Mitglied von AppWindow Zweck
Position, Size Lage und Größe des ganzen Fensters, nur lesen
Move, Resize, MoveAndResize setzen, in physischen Pixeln
Changed ein Ereignis für alle Änderungen (DidPositionChange, DidSizeChange, DidPresenterChange)
Presenter OverlappedPresenter (Standard), FullScreenPresenter, CompactOverlayPresenter

Die physischen Pixel sind die Falle: WinUI rechnet in logischen Pixeln, die mit der Skalierung wachsen; ein Wert aus AppWindow.Size ist bei 150 Prozent anderthalbmal so groß wie das, was Sie in XAML sehen. Größenangaben in logischen Pixeln am Window nennt Learn experimentell; der Kurs nutzt sie nicht.