Die Kladde läuft nach K2 im Browser. Dieser Kurs gibt ihr ein Windows-Programm: eine Desktop-Anwendung mit eigenem Fenster, Navigation, Tastaturbedienung und den Funktionen, die Anwenderinnen und Anwender von einem Windows-Programm erwarten. Das Werkzeug dafür heißt WinUI 3, und es gehört zum Windows App SDK. Diese Lektion klärt, was beides ist und was nicht, richtet Ihren Rechner ein, legt src/Kladde.Desktop aus einer Vorlage an und zeigt, wie ein WinUI-Projekt aufgebaut ist und wie schnell man darin eine Oberfläche ändern kann.

Der Kurs setzt K2 voraus: C# und async, die Web-API der Kladde mit ihrer Anmeldung über Entra ID und xUnit. Das wiederholt dieser Kurs nicht; wo er darauf aufbaut, steht ein Verweis. XAML und MVVM kennen Sie vielleicht aus dem Kurs W2 .NET MAUI: Der Kurs sagt, was gleich ist und was WinUI 3 anders macht, setzt W2 aber nicht voraus.

Modul Lektion Was entsteht
W5.1 W5.1.1 WinUI 3 und das Windows App SDK im Überblick das Projekt Kladde.Desktop, startbar als Fenster
W5.1 W5.1.2 XAML, Layouts und Navigation Seiten für Termine und Kontakte mit NavigationView, ein Dialog zum Löschen
W5.2 W5.2.1 MVVM, Dependency Injection und Tests die Seiten als ViewModels in einer eigenen Bibliothek, getestet ohne Fenster
W5.2 W5.2.2 Daten: API, Anmeldung, Zwischenspeicher Termine aus der Web-API, mit Anmeldung, lokal zwischengespeichert
W5.3 W5.3.1 Fenster, Lebenszyklus und Benachrichtigungen Fensterzustand, eine Instanz, Erinnerung als Benachrichtigung
W5.3 W5.3.2 Testen, verpacken, verteilen ein MSIX-Paket, signiert und auf einem zweiten Rechner installiert

Stand der Prüfung. Dieser Kurs wurde auf einem Rechner geschrieben, auf dem das Windows App SDK, die WinUI-Vorlagen und die winapp CLI nicht eingerichtet sind. Jede Befehlszeile und jede Zeile XAML und C# in dieser Lektion stammt aus Referenz und Beispielen auf Microsoft Learn oder ist gegen sie gelesen. Sie wurde nicht gegen ein echtes WinUI-Projekt ausgeführt. Wo die Lektion beschreibt, was auf dem Bildschirm erscheint, beschreibt sie es nach Learn; sie gibt keine Ausgabe wieder, die gemessen wurde. Wo Learn etwas nicht sagt, steht das im Text („Learn nennt dazu nichts, prüfen Sie …“). Wenn Ihre Beobachtung von der Lektion abweicht, gilt Ihre Beobachtung, und Sie halten sie fest.

Was das Windows App SDK ist

Das Windows App SDK ist nach Learn die empfohlene Entwicklungsplattform für neue Windows-Desktop-Anwendungen. Es ist ein Satz von Programmierschnittstellen, der über NuGet kommt und unabhängig vom Betriebssystem ausgeliefert wird. Dadurch erreichen neue Funktionen Ihre Anwendung, ohne dass Windows selbst aktualisiert werden muss. Es läuft auf Windows 11 und auf Windows 10 ab Version 1809.

Learn nennt als Bestandteile:

Bestandteil Wofür
WinUI das native Rahmenwerk für die Oberfläche, mit C# oder C++ und XAML, im Stil von Fluent Design
Fenster (Windowing) Fenster anlegen, positionieren und anpassen
App-Lebenszyklus Instanzverwaltung, reiche Aktivierung (Datei, Protokoll, Neustart), Energieverwaltung
Ressourcenverwaltung Zeichenfolgen und Bilder je Sprache, Skalierung und Kontrastvariante, getrennt von der Programmlogik
Benachrichtigungen lokale App-Benachrichtigungen und Push-Benachrichtigungen aus der Cloud
Widgets Informationen im Widget-Bereich von Windows
XAML Islands WinUI-Steuerelemente in vorhandenen Desktop-Anwendungen
Bereitstellung die Laufzeit des Windows App SDK mit der Anwendung ausliefern, gepackt oder ungepackt
Windows AI APIs, Windows ML KI-Funktionen und lokale ONNX-Modelle; dieser Kurs lehrt sie nicht
moderne Textdarstellung geräteunabhängiges Textlayout mit ClearType

Die Version bestimmen Sie über die Download-Seite zum Windows App SDK; sie ändert sich im Monatsrhythmus. Dieser Kurs nennt deshalb außer „Windows App SDK 2“ keine Versionsnummern. Es gibt drei Kanäle: Stable für die Produktion (der Standard in der Dokumentation), Preview und Experimental. Der Kurs bleibt bei Stable.

Was WinUI 3 ist

WinUI 3 ist nach Learn das empfohlene native Oberflächen-Rahmenwerk für neue Windows-Desktop-Anwendungen. Es arbeitet mit XAML, es gibt es für C# und C++, und es läuft auf x86, x64 und ARM. Teile der Windows-Oberfläche und PowerToys sind damit gebaut. WinUI 3 ist der Teil des Windows App SDK, der Fenster füllt; alles andere in der Tabelle oben (Lebenszyklus, Benachrichtigungen, Ressourcen) ist unabhängig davon verwendbar.

Dieser Satz ist der wichtigste der Lektion: Das Windows App SDK ist die Plattform, WinUI 3 ist ihre Oberfläche. Wer „WinUI“ sagt, meint im Alltag meist beides. Im Kurs steht „Windows App SDK“, wenn Fenster, Lebenszyklus oder Benachrichtigungen gemeint sind, und „WinUI“ oder „XAML“, wenn es um Steuerelemente und Seiten geht.

Wo WinUI 3 steht: WPF, Windows Forms, UWP, .NET MAUI

Vier Nachbarn tauchen in jeder Diskussion auf. Hier steht zu jedem ein Absatz, ohne Wertung dessen, was Sie schon im Betrieb haben.

WPF und Windows Forms. Beide bleiben für vorhandene Anwendungen gültig; wer eine solche Anwendung pflegt, auf .NET 10 hebt oder ins Web und nach Azure bringt, findet das im Kurs „Modernisierung: WinForms/WPF nach .NET 10, Web und Azure“, nicht hier. Zwei Brücken nennt Learn: Erstens kann das Windows App SDK in vorhandene WPF-, Windows-Forms- und Win32-Projekte eingebaut werden; die Teile, die nichts mit WinUI zu tun haben (Anwendungslebenszyklus, Fenster, App-Benachrichtigungen), lassen sich dort verwenden. Zweitens bringen WinUI XAML Islands WinUI-Steuerelemente in einen Teil einer vorhandenen Anwendung, etwa als neuer Bildschirm in einem WPF-Programm. Learn grenzt sie von den älteren „system XAML Islands“ ab, die UWP-Steuerelemente hosten und andere Schnittstellen benutzen; die beiden dürfen nicht vermischt werden. Mehr zu beidem steht im Kurs Modernisierung und in den Seiten unter „Weiterlesen“; dieser Kurs lehrt weder WPF noch Windows Forms noch eine Migration.

UWP. Das Windows App SDK unterstützt UWP-Anwendungen nicht. Für Programme, die heute UWP sind, nennt Learn den Weg „Migrate from UWP to the Windows App SDK“; Namensräume, Projektmodell und einzelne Schnittstellen unterscheiden sich, viele Konzepte bleiben. Der Kurs behandelt UWP nicht weiter.

.NET MAUI. MAUI ist ein plattformübergreifendes Rahmenwerk für Mobilgeräte und Desktop; unter Windows baut es auf WinUI 3 auf. Es lohnt sich, wenn dieselbe Oberfläche auf Android, iOS, macOS und Windows laufen soll (Kurs W2 .NET MAUI). WinUI 3 läuft nur unter Windows und spricht dafür die Windows-Schnittstellen unmittelbar an: Wer ein Programm für Windows baut, das sich wie ein Windows-Programm anfühlt, ist bei WinUI 3 richtig. Beide benutzen XAML; was gleich aussieht, ist nicht gleich benannt (zum Beispiel heißen Seiten, Navigation und Steuerelemente anders), und die Lektion W5.1.2 geht darauf ein.

WinUI 3 selbst. Für neue Windows-Programme ist es der Weg, den Learn empfiehlt. Was daraus für Ihre Entscheidung folgt, hängt davon ab, ob die Anwendung neu ist, auf welche Windows-Versionen sie muss und wer sie später pflegt; der Kurs gibt keine Wertung vor.

Was dieser Kurs nicht ist

  • Keine Einführung in C# oder Entra ID. Beides bringen Sie aus K0 bis K2 mit.
  • Keine Plattformübergreifung. Dafür gibt es W2 .NET MAUI.
  • Kein WPF, kein Windows Forms, keine Migration (Kurs Modernisierung).
  • Keine Spieleentwicklung und kein C++/WinRT. C++ gibt es bei WinUI 3 auch; der Kurs bleibt bei C#.
  • Keine Tiefe zu den Windows-KI-Schnittstellen. Sie stehen in der Tabelle; der Kurs lehrt sie nicht.

Werkzeuge

Learn nennt für die ersten Schritte zwei Wege. Beide sind in Ordnung, und beide führen zum selben Ergebnis, einem Projekt, das Sie in Ihrem Werkzeug weiter bearbeiten:

Visual Studio winapp CLI
Voraussetzung Visual Studio in der aktuellen Fassung (Learn nennt sie auf der Schnellstart-Seite) mit der Arbeitslast „WinUI application development“, dazu Entwicklermodus das .NET 10 SDK, die Windows App Development CLI, Entwicklermodus
Editor Visual Studio ein beliebiger Editor und ein Terminal
Starten F5 winapp run
Besonderes XAML Hot Reload, Live Visual Tree, Debugger mit Haltepunkten, auch in XAML Learn nennt die winapp CLI öffentliche Vorschau (Public Preview); für diesen Weg ab Version 0.6

Die winapp CLI installiert das .NET SDK nicht, winapp new und winapp run brechen nach Learn mit einem Hinweis ab, wenn es fehlt. Mit WinGet:

PowerShell
winget install --id Microsoft.DotNet.SDK.10 --exact --source winget
winget install --id Microsoft.WinAppCli --exact --source winget

Öffnen Sie danach ein neues Terminal, damit es die Befehle findet, und prüfen Sie die Versionen:

PowerShell
dotnet --version
winapp --version

Learn verlangt .NET SDK 10 oder neuer und winapp CLI 0.6 oder neuer. Für Visual Studio zeigt Learn einen Weg, die benötigten Arbeitslasten und den Entwicklermodus mit einer WinGet-Konfigurationsdatei einzurichten:

PowerShell
winget configure -f https://aka.ms/winui-config

Lesen Sie die Konfiguration vorher, bevor Sie sie ausführen: Sie verändert Ihren Rechner (Visual-Studio-Arbeitslasten, Entwicklermodus). Learn verlinkt dafür eine Beschreibung der Konfiguration. Wer lieber von Hand arbeitet, installiert Visual Studio und wählt im Visual Studio Installer die Arbeitslast WinUI application development.

Dazu kommt, unabhängig vom Weg: Die WinUI 3 Gallery. Sie zeigt jedes Steuerelement mit Beispielen, Sie bekommen sie im Microsoft Store oder bauen sie aus dem Quelltext auf GitHub (Repository microsoft/WinUI-Gallery). Das Beispiel dort ist oft der kürzeste Weg, um die XAML-Zeilen eines Steuerelements zu finden.

Der Entwicklermodus

Learn verlangt für beide Wege den Entwicklermodus von Windows: Windows braucht ihn, um die App aus Ihrer Ausgabe zu registrieren. Sie schalten ihn in den Einstellungen ein (Learn nennt für das Windows-11-Fenster: System, Für Entwickler; die Bezeichnungen ändern sich zwischen Windows-Versionen). Das Einschalten verlangt Administratorrechte und kann auf Geräten einer Firma gesperrt sein. Meldet die Bereitstellung später, der Entwicklermodus sei ausgeschaltet, ist das die Ursache. Was der Modus an Ihrem Rechner ändert, beschreibt Learn auf einer eigenen Seite zur Sicherheit der winapp CLI; lesen Sie sie, wenn der Rechner nicht Ihnen allein gehört.

Vorlagen

Learn nennt für Visual Studio und für dotnet new diese Projektvorlagen für C#:

Vorlage Kurzname Was sie anlegt
WinUI Blank App (Packaged) winui ein leeres, gepacktes Projekt mit einem Fenster
WinUI Navigation App winui-navview ein Projekt mit Navigationsleiste
WinUI TabView App winui-tabview ein Projekt mit Registerkarten
WinUI MVVM App winui-mvvm ein Projekt mit MVVM-Grundgerüst
WinUI Class Library winui-lib eine Bibliothek, die WinUI-Typen benutzt
WinUI Unit Test App winui-unittest ein Testprojekt, das in einer WinUI-Anwendung läuft

Dazu gibt es Elementvorlagen für ein vorhandenes Projekt: Blank Page, Blank Window, Content Dialog, Resource Dictionary, Resources File (.resw), Templated Control und User Control. Auf der Kommandozeile fügt zum Beispiel dotnet new winui-page -n SettingsPage eine Seite hinzu; dotnet new list winui listet alle Vorlagen. Die Kurznamen der Projektvorlagen in der Tabelle sind die, die Learn nennt; wenn dotnet new list winui bei Ihnen etwas anderes zeigt, gilt die Liste Ihres Rechners.

Der Kurs beginnt mit der leeren Vorlage, weil man an ihr jede Datei benennen kann. Navigationsgerüst und MVVM bauen die Lektionen W5.1.2 und W5.2.1 selbst, damit Sie wissen, was in der Vorlage steht, wenn Sie sie später doch einmal nehmen.

Das Projekt anlegen

Mit Visual Studio: Create a new project, nach WinUI suchen, die C#-Vorlage WinUI Blank App (Packaged) wählen, Namen und Ort eingeben, F5 drücken. Beim ersten Mal kann ein Fenster mit dem Entwicklermodus erscheinen; Learn nennt es als Hinweis im Ablauf, ebenso, dass Visual Studio dafür ein weiteres Paket installiert.

Mit der winapp CLI, aus einem Ordner, in dem Sie Ihre Projekte halten:

PowerShell
winapp new --name MyWinUIApp --template winui --use-defaults
cd MyWinUIApp
winapp run

winapp new legt nach Learn die leere WinUI-Anwendung an, winapp run baut das Projekt und startet es; eine eigene Bau- und Registrierungsanweisung ist nicht nötig. Learn zeigt den Befehl für einen Ordner mit dem Namen des Projekts (cd MyWinUIApp). Ob winapp new eine Option für einen Zielordner hat, steht auf den gelesenen Seiten nicht: Wechseln Sie vorher in den Ordner, in dem das Projekt entstehen soll, und schauen Sie nach dem Befehl, wo es gelandet ist.

Learn weist darauf hin, dass sich die Vorlagen unterscheiden: In der aktuellen Vorlage der CLI enthält MainPage.xaml ein leeres <Grid />; fehlt diese Datei in Ihrer Vorlage, steht der Inhalt in MainWindow.xaml. Das ist keine Kleinigkeit, wenn Sie Beispiele lesen: Welche der beiden Dateien Ihre Vorlage hat, bestimmt, wo der erste Inhalt steht.

Für die erste Änderung zeigt Learn diesen Inhalt in der Seite (oder im Fenster):

xaml
<Grid>
    <TextBlock
        Text="Hello, WinUI!"
        HorizontalAlignment="Center"
        VerticalAlignment="Center" />
</Grid>

Hat die Seite schon Steuerelemente, fügen Sie nur das TextBlock in die vorhandene Fläche ein und lassen Namen und Ereignis-Handler stehen. Ersetzen Sie nicht die umgebende Page, das Window und nicht den Rahmen und die Titelleiste in MainWindow.xaml. Speichern Sie, starten Sie neu (winapp run oder F5). Das Fenster zeigt nach Learn den Text.

Wenn nichts erscheint, nennt Learn diese Prüfungen:

Beobachtung Was Sie prüfen
winapp oder dotnet wird nicht erkannt das Terminal nach der Installation neu öffnen, die Versionsbefehle von oben ausführen
winapp new wird nicht erkannt der Weg verlangt winapp CLI 0.6 oder neuer: aktualisieren
in Visual Studio fehlen die WinUI-Vorlagen im Visual Studio Installer Modify wählen, die Arbeitslast prüfen, Visual Studio neu starten
Bau meldet einen SDK- oder Wiederherstellungsfehler den ersten Fehler der Ausgabe lesen, die Voraussetzungen des Weges prüfen, die Seite „Windows App SDK support“ für Versionsanforderungen lesen, bevor Sie Projekteigenschaften ändern
die Bereitstellung meldet, der Entwicklermodus sei aus den Entwicklermodus einschalten und neu starten
die neue Meldung erscheint nicht die XAML-Datei speichern und die App neu starten; in Vorlagen mit MainPage.xaml die Meldung in der Seite ergänzen, nicht im Fenster

Kladde.Desktop

Für die Kladde legen Sie das Projekt später an derselben Stelle an wie die Projekte aus K2. Die Aufteilung gilt für den ganzen Kurs:

Projekt Inhalt Wann
src/Kladde.Desktop die WinUI-Anwendung, gepackt: Fenster, Seiten, App.xaml ab dieser Lektion
src/Kladde.Desktop.Logic eine einfache net10.0-Bibliothek: ViewModels, Dienste, Schnittstellen, keine XAML-Typen W5.2.1
tests/Kladde.Desktop.Logic.Tests xUnit-Tests für diese Bibliothek W5.2.1

Der Grund für die Trennung steht bei Learn im Abschnitt zum Testen: Code, der Microsoft.UI.Xaml-Typen braucht, läuft nur auf dem UI-Thread einer XAML-Anwendung. Learn empfiehlt, Code in eine Bibliothek auszulagern, die Anwendung und Test beide referenzieren. W5.2.1 setzt das um; bis dahin gibt es nur das Anwendungsprojekt.

Wie ein WinUI-Projekt aufgebaut ist

Learn beschreibt die Dateien, mit denen Sie am meisten zu tun haben (Lernprogramm „Project setup“ der WinUI-Notes-Anleitung):

Datei oder Ordner Aufgabe
Assets Logo, Bilder und andere Medien; zu Beginn Platzhalter für das Logo, das die Anwendung im Startmenü, in der Taskleiste und im Store vertritt
App.xaml und App.xaml.cs in XAML die Ressourcen für die ganze Anwendung (Farben, Stile, Vorlagen); im Code in der Regel das Erzeugen und Aktivieren des Fensters
MainWindow.xaml und MainWindow.xaml.cs das Fenster der Anwendung
Package.appxmanifest das Paketmanifest: Herausgeber, Logos, Prozessorarchitekturen und weitere Angaben, die bestimmen, wie die Anwendung erscheint
die Projektdatei (.csproj) Zielframework, Verweise, Einstellungen zum Paket

Zu jeder XAML-Datei gehört eine Code-Behind-Datei. In ihr deklariert die XAML-Datei die Klasse mit dem Attribut x:Class, und beide sind Teile derselben partial class. Die XAML-Datei beschreibt die Oberfläche, die Code-Behind-Datei reagiert auf Ereignisse und verändert die Objekte, die in XAML angelegt wurden. Learn nennt als Merkmale, die beweisen, dass ein Projekt WinUI 3 und kein UWP-, WPF- oder MAUI-Projekt ist:

  1. Die Projektdatei enthält <UseWinUI>true</UseWinUI>.
  2. Sie verweist auf das Paket Microsoft.WindowsAppSDK.
  3. Der XAML-Code und der C#-Code benutzen Typen aus Microsoft.UI.Xaml.
  4. Package.appxmanifest liefert die Paketidentität.
  5. Das Zielframework enthält Windows; Learn nennt als Beispiel net10.0-windows10.0.26100.0.

Prüfen Sie das an Ihrem Projekt. Ihr Zielframework kann sich von dem Beispiel unterscheiden, je nachdem, was Ihre Vorlage setzt.

Die Namensräume sind für Leute mit WPF- oder UWP-Erfahrung die häufigste Stolperstelle: WinUI 3 benutzt Microsoft.UI.Xaml und Microsoft.UI.Xaml.Controls, nicht Windows.UI.Xaml. Learn zeigt es in einem Lernprogramm zur Arbeit mit einem KI-Assistenten: Dort steht ein Beispiel mit using Windows.UI.Xaml.Controls; und der Hinweis, dass das der UWP-Namensraum und für WinUI 3 falsch ist; richtig ist Microsoft.UI.Xaml.Controls (und dem Dialog dort fehlt zusätzlich die XamlRoot, dazu in W5.1.2 mehr). Ein Blick auf die using-Zeilen ist die schnellste Prüfung eines fremden Codebeispiels, ob von einem Assistenten, aus einem Forum oder aus einem alten Artikel.

Wie die Anwendung startet

App.xaml.cs ist der Einstieg. Die Klasse App leitet von Application ab, und ihre Methode OnLaunched läuft, wenn die Anwendung gestartet wird. Dort entsteht das Fenster. Learn zeigt in der Referenz zur Klasse Page ein Beispiel, das das Zusammenspiel zeigt, wenn eine Anwendung ein Frame in das Fenster setzt und zu einer Seite navigiert:

C#
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    m_window = new MainWindow();

    // Create a Frame to act as the navigation context.
    Frame rootFrame = new Frame();

    rootFrame.NavigationFailed += OnNavigationFailed;

    // Place the frame in the current Window
    m_window.Content = rootFrame;

    rootFrame.Navigate(typeof(MainPage), args.Arguments);

    m_window.Activate();
}

Das ist ein Beispiel für ein Muster, nicht der Inhalt Ihrer Vorlage: Learn nennt auf den gelesenen Seiten nicht, was OnLaunched in der Vorlage winui genau enthält. Öffnen Sie App.xaml.cs in Ihrem Projekt und lesen Sie. Die Muster aus dem Beispiel sind die Bausteine, die Sie in den Vorlagen wiederfinden werden: Ein Fenster ist ein Microsoft.UI.Xaml.Window, es wird erzeugt und mit Activate() sichtbar gemacht, ein Frame ist ein Behälter für Seiten (Frame.Navigate(typeof(...))), eine Seite ist eine Page. In W5.1.2 setzen Sie ein Frame mit einer Seitennavigation ein.

Ein Hinweis zum Begriff Fenster: Window aus WinUI ist nach Learn eine Abstraktion über die niedrigeren Fensterarten (bei UWP CoreWindow, bei Win32 das Fensterhandle). Dass Window keine Eigenschaft XamlRoot hat, das Element in ihm aber schon, ist die Ursache für den Dialog-Fehler in W5.1.2.

Gepackt und ungepackt

Die WinUI-Vorlagen bauen nach Learn standardmäßig ein MSIX-Paket: Die Anwendung hat eine Paketidentität, das Manifest Package.appxmanifest, und Windows installiert sie als Paket. Gepackt ist die empfohlene Voreinstellung. Daraus folgt für Visual Studio: Starten Sie mit dem Startprofil MsixPackage, nicht mit dem Profil, das die .exe direkt aufruft. Der Paketierungsschritt installiert die benötigten Laufzeitteile.

Ungepackt heißt: kein MSIX, keine Paketidentität. Es gibt zwei Wege, die Laufzeit des Windows App SDK mitzubringen:

  • Abhängig vom Framework: Die Laufzeit muss auf dem Rechner installiert sein, der Installer der Anwendung kümmert sich darum. Fehlt sie, meldet Windows beim Start den Fehler „Unable to load DLL 'Microsoft.ui.xaml.dll'“. Das ist die häufigste Ursache dieser Meldung nach Learn: eine ungepackte Anwendung auf einem Rechner ohne die passende Laufzeit.
  • Selbstenthaltend: Die Anwendung bringt die Abhängigkeiten des Windows App SDK mit.

Was dazwischen liegt (Einstellungen in der Projektdatei, Verteilungswege, Folgen für Updates und Dateizuordnungen), ist der Stoff von W5.3.2. Für den Anfang genügt der Unterschied: gepackt ist der Weg der Vorlage, und die Übungen laufen gepackt.

XAML Hot Reload und die Werkzeuge zur Laufzeit

Der Grund, warum die Arbeit an einer Oberfläche angenehm sein kann: Sie ändern XAML, während die Anwendung läuft, und sehen die Änderung, ohne neu zu starten. Für WinUI 3 hat Visual Studio dazu vier Werkzeuge, die zusammen funktionieren:

Werkzeug Aufgabe Wo
XAML Hot Reload schiebt Änderungen an XAML in die laufende Anwendung automatisch, solange Sie eine XAML-Datei bearbeiten und der Debugger angehängt ist
Live Visual Tree zeigt den Elementbaum der laufenden Anwendung und lässt Sie Elemente auswählen Debug, Windows, Live Visual Tree
Live Property Explorer zeigt und ändert die Eigenschaften des gewählten Elements zur Laufzeit Debug, Windows, Live Property Explorer
XAML Live Preview zeigt die laufende Anwendung in Visual Studio Debug, Windows, XAML Live Preview

Die Voraussetzungen und Grenzen, nach Learn:

  • XAML Hot Reload braucht den Debugger. Starten Sie mit F5; Strg+F5 (ohne Debugging) schaltet Hot Reload, Live Visual Tree und Live Property Explorer ab. Die laufende Anwendung zeigt eine kleine Werkzeugleiste, die bestätigt, dass Hot Reload verfügbar ist. Fehlt sie, prüfen Sie unter Tools, Options, Debugging, XAML Hot Reload, ob die Option eingeschaltet ist.
  • Hot Reload schafft die gewöhnlichen Änderungen: Elemente hinzufügen, entfernen oder umordnen, Eigenschaftswerte ändern (Farben, Abstände, Text, Größen), Stile und Ressourcen ergänzen oder ändern, den Inhalt von Datenvorlagen ändern.
  • Einen Neustart verlangen nach Learn neue Klassen, neue Ereignis-Handler im Code-Behind, Änderungen am x:Class, gelegentlich Änderungen an den zusammengeführten Wörterbüchern in App.xaml und x:Bind-Ausdrücke, die auf neue Eigenschaften zeigen. Wenn Hot Reload eine Änderung nicht anwenden kann, zeigt die Werkzeugleiste eine Meldung.
  • Der Designer (die Registerkarte „Design“ mit Ziehen und Ablegen) unterstützt WinUI-3-Projekte nach Learn derzeit nicht. Eine XAML-Datei, die nur den XML-Editor zeigt, ist also nicht defekt. Dafür gibt es die Werkzeuge der Tabelle. Learn empfiehlt außerdem das Fenster XAML Binding Failures (Debug, Windows), um Fehler in Bindungen zu finden.
  • Die winapp CLI hat diese Werkzeuge nicht; sie baut und startet (winapp run). Wenn Sie mit ihr arbeiten, ändern Sie XAML, speichern und starten neu.

Learn schlägt eine Spielwiese-Seite vor: eine eigene Seite, deren einziger Zweck es ist, Steuerelemente, Stile und Layouts auszuprobieren. Sie lässt sich während der Entwicklung über einen Menüeintrag erreichen, der nur in Debug-Builds erscheint (#if DEBUG). Das ist ein guter Ort für alles, was Sie in W5.1.2 ausprobieren, bevor es in eine echte Seite kommt.

Übung 1

Die Vorlage starten. Legen Sie ein Wegwerfprojekt an, starten Sie es und ändern Sie die Oberfläche einmal.

  1. Legen Sie in einem leeren Ordner außerhalb der Kladde ein Projekt an, das Sie nach der Übung wieder löschen: in Visual Studio die Vorlage WinUI Blank App (Packaged) mit dem Namen WinUIProbe, oder mit der CLI winapp new --name WinUIProbe --template winui --use-defaults.
  2. Starten Sie die Anwendung (F5 oder winapp run). Es öffnet sich ein Fenster.
  3. Beenden Sie die Anwendung. Öffnen Sie MainPage.xaml (oder MainWindow.xaml, wenn es die Seite nicht gibt) und ergänzen Sie das TextBlock mit „Hello, WinUI!“ aus dem Abschnitt oben, ohne vorhandene Steuerelemente zu entfernen.
  4. Starten Sie neu.

So prüfen Sie: Das Fenster zeigt den neuen Text, in der Mitte. Erscheint er nicht, gehen Sie die Tabelle der Beobachtungen durch.

Lösung 1

Die Schritte sind oben beschrieben. Die häufigsten Gründe, warum die Vorlage nicht startet: ein fehlender Entwicklermodus (die Bereitstellung meldet ihn), eine fehlende Arbeitslast (die Vorlagen erscheinen in Visual Studio nicht), eine falsche Version von .NET SDK oder winapp CLI. Kommt eine andere Fehlermeldung, steht die Ursache in den ersten Zeilen der Ausgabe des Baus. Lesen Sie den ersten Fehler, nicht den letzten: Die späteren sind meist Folgen.

Aufräumen: Beenden Sie die Anwendung. Ein gepacktes Projekt wird bei der Bereitstellung als App registriert (Learn sagt, dass der Entwicklermodus nötig ist, um die App aus der Ausgabe zu registrieren). Schauen Sie nach dem Beenden in die App-Liste von Windows, ob ein Eintrag mit dem Projektnamen steht, und deinstallieren Sie ihn wie jede andere App; wie die Einträge dort heißen, nennt Learn auf den gelesenen Seiten nicht. Dann löschen Sie den Ordner WinUIProbe.

Übung 2

Hot Reload ausprobieren. Diese Übung braucht Visual Studio. Mit der winapp CLI lesen Sie sie als Beschreibung und überspringen die Schritte 2 bis 4.

  1. Starten Sie WinUIProbe mit dem Debugger (F5, nicht „ohne Debugging“). Prüfen Sie, ob die Werkzeugleiste in der laufenden Anwendung erscheint.
  2. Ändern Sie in MainPage.xaml den Text und die FontSize des TextBlock und speichern Sie. Beobachten Sie, ob die laufende Anwendung die Änderung ohne Neustart zeigt.
  3. Öffnen Sie Debug, Windows, Live Visual Tree. Wählen Sie das TextBlock im Baum aus und öffnen Sie den Live Property Explorer. Ändern Sie dort den Außenabstand (Margin).
  4. Fügen Sie in der XAML-Datei eine zweite Schaltfläche hinzu und geben Sie ihr einen Ereignis-Handler Click="Neu_Click", den Sie im Code-Behind anlegen. Beobachten Sie, was passiert, wenn Sie die Änderung anwenden lassen.

So prüfen Sie: Die Schritte 2 und 3 wirken ohne Neustart. Zu Schritt 4 sagt Learn, dass neue Ereignis-Handler im Code-Behind einen Neustart verlangen. Die Werkzeugleiste kann dazu eine Meldung zeigen.

Lösung 2

Schritt 2: Eigenschaftswerte gehören zu dem, was Hot Reload anwendet. Schritt 3: Der Live Property Explorer ändert nur die laufende Anwendung, nicht Ihre Datei. Merken Sie sich das, sonst verlieren Sie die Änderung beim nächsten Start. Übernehmen Sie, was Ihnen gefällt, in die XAML-Datei. Schritt 4: Ein neuer Handler ist eine Änderung am C#-Code, und XAML Hot Reload lädt C#-Code nicht. Starten Sie neu. Zeigt Hot Reload gar nichts, prüfen Sie nacheinander: läuft der Debugger (Strg+F5 schaltet Hot Reload ab), ist Enable XAML Hot Reload eingeschaltet, wurde die Datei gespeichert, steht in der Werkzeugleiste eine Meldung.

Die Seite zu den XAML-Laufzeit-Werkzeugen nennt für WinUI 3 eine Mindestfassung von Visual Studio. Welche Fassung Sie haben, zeigt Visual Studio selbst unter Help, About; vergleichen Sie sie mit der Angabe auf Learn, wenn die Werkzeuge in Ihrer Installation fehlen.

Aufräumen: nichts außer dem Löschen des Projekts am Ende der Lektion.

Übung 3

Die Dateien zuordnen. Ohne etwas zu ändern, ordnen Sie Ihrem WinUIProbe-Projekt vier Fragen zu.

  1. In welcher Datei steht der Name des Zielframeworks, und wie lautet er? Enthält die Projektdatei UseWinUI und einen Verweis auf Microsoft.WindowsAppSDK?
  2. In welcher Datei entsteht das Fenster, und in welcher Methode?
  3. Wo ändern Sie den Namen, den Windows der Anwendung im Startmenü gibt, und wo das Logo?
  4. Wo würden Sie eine Farbe eintragen, die in der ganzen Anwendung gelten soll?

So prüfen Sie: Sie finden jede Stelle, ohne zu suchen. Wenn nicht, öffnen Sie die Datei und lesen die Zeilen.

Lösung 3

  1. Die Projektdatei (.csproj). Learn nennt als Beispiel net10.0-windows10.0.26100.0; Ihre Vorlage kann einen anderen Windows-Teil setzen. Prüfen Sie UseWinUI und Microsoft.WindowsAppSDK.
  2. In App.xaml.cs, in OnLaunched.
  3. Der Anzeigename und die Logos kommen aus Package.appxmanifest (Herausgeber, Logos und weitere Angaben, die bestimmen, wie die App im Store und im System erscheint); die Logo-Dateien liegen im Ordner Assets. Wie genau Visual Studio die Felder im Manifest-Editor nennt, beschreibt Learn auf den gelesenen Seiten nicht; öffnen Sie die Datei mit dem Manifest-Editor und lesen Sie die Bezeichnungen.
  4. In App.xaml. Learn nennt sie als Ort für Ressourcen der ganzen Anwendung. Wie Sie dort Farben für helles und dunkles Thema getrennt eintragen, zeigt W5.1.2.

Übung 4

Kladde.Desktop anlegen. Legen Sie das Projekt für die Kladde an.

  1. Wechseln Sie in den Hauptordner Ihrer Kladde (dort, wo Kladde.slnx und der Ordner src liegen) und weiter nach src.
  2. Legen Sie das Projekt an. Mit Visual Studio: neues Projekt aus WinUI Blank App (Packaged), Name Kladde.Desktop, Ort src. Mit der CLI: winapp new --name Kladde.Desktop --template winui --use-defaults.
  3. Starten Sie die Anwendung. Es erscheint die leere Vorlage.
  4. Setzen Sie im TextBlock oder in der Fenstertitel-Eigenschaft einen sichtbaren Hinweis „Kladde“, damit Sie wissen, dass es das richtige Projekt ist. Den Anzeigenamen der App ändern Sie in W5.3.2, wenn es ums Paket geht.
  5. Stoppen Sie die Anwendung. Nehmen Sie src/Kladde.Desktop ins Repository auf, in einem Branch feature/winui-app, mit einer Commit-Nachricht wie feat(desktop): WinUI-Vorlage als Kladde.Desktop.

So prüfen Sie: Die Anwendung startet und zeigt die Vorlage. git status zeigt src/Kladde.Desktop mit den Dateien der Vorlage, aber ohne die Ordner bin und obj. Stehen sie dort, ergänzen Sie bin/ und obj/ in der .gitignore.

Lösung 4

Der Befehl legt neben den K2-Projekten das Verzeichnis src/Kladde.Desktop an. Wo die CLI das Projekt ablegt, haben die gelesenen Seiten nicht beschrieben: Prüfen Sie nach dem Befehl, ob src/Kladde.Desktop existiert, und verschieben Sie den Ordner sonst. Die Klassen stehen im Namensraum Kladde.Desktop. In die Lösungsdatei Kladde.slnx nehmen Sie das Projekt in dieser Lektion nicht auf: Wie das Anwendungsprojekt, die Bibliothek und die Tests zusammen gebaut werden, legt W5.2.1 fest, wenn es die ersten Tests gibt.

Der Name des Projekts ist zugleich der Name des Namensraums. Er erscheint später in Fehlermeldungen, Typnamen und im Paket. Wählen Sie ihn deshalb jetzt und ändern Sie ihn nicht mitten im Kurs.

Aufräumen: Löschen Sie WinUIProbe aus den Übungen 1 bis 3 (und entfernen Sie die App vorher aus der App-Liste von Windows, siehe Lösung 1).

Die Kladde: ein Windows-Programm neben der Webanwendung

Mit dieser Lektion hat die Kladde ein neues Projekt: src/Kladde.Desktop, eine gepackte WinUI-Anwendung, die ein leeres Fenster zeigt. Die Projekte aus K2 (Kladde.Core, Kladde.Data, Kladde.Web und die übrigen) ändern Sie nicht. Das Programm wird die Web-API der Kladde nutzen, ab W5.2.2; die Regeln der Kladde bleiben dort, wo sie sind. In W5.1.2 bauen Sie die ersten eigenen Seiten: Termine und Kontakte, in einer NavigationView, noch mit festen Beispieldaten im Code und ohne MVVM, weil MVVM erst in W5.2.1 an der Reihe ist. Bis dahin steht Logik im Code-Behind, und die Lektion sagt es jedes Mal, damit Sie es später aufräumen können.

Was Sie jetzt können

  • Sie erklären, was das Windows App SDK und WinUI 3 sind, und wie sich beide zu WPF, Windows Forms, UWP und .NET MAUI verhalten, und Sie wissen, wo vorhandene WPF- und Windows-Forms-Programme behandelt werden.
  • Sie richten .NET 10 SDK, Visual Studio mit der Arbeitslast für WinUI oder die winapp CLI und den Entwicklermodus ein.
  • Sie legen eine WinUI-Vorlage an, starten sie und ordnen App.xaml, MainWindow.xaml, Package.appxmanifest und die Projektdatei ihrem Zweck zu.
  • Sie unterscheiden gepackt und ungepackt und erkennen den Fehler, der auftritt, wenn die Laufzeit fehlt.
  • Sie nutzen XAML Hot Reload, Live Visual Tree und die WinUI 3 Gallery mit ihren Grenzen und haben Kladde.Desktop angelegt.

Weiterlesen