Tutorial: Modernisieren einer WPF-App

Es gibt zahlreiche Möglichkeiten, vorhandene Desktop-Apps durch Integration der neuesten Windows-Features in den vorhandenen Quellcode zu modernisieren, statt die Apps von Grund auf neu zu schreiben. In diesem Tutorial werden verschiedene der Möglichkeiten untersucht, um eine vorhandene WPF-Branchen-App unter Verwendung dieser Features zu modernisieren:

  • .NET Core 3
  • UWP-XAML-Steuerelementen mit XAML Islands
  • Adaptive Karten und Windows-Benachrichtigungen
  • MSIX-Bereitstellung

Für dieses Tutorial sind die folgenden Entwicklungskenntnisse erforderlich:

  • Erfahrung in der Entwicklung von Windows-Desktop-Apps mit WPF
  • Grundkenntnisse in C# und XAML
  • Grundkenntnisse in UWP

Übersicht

In diesem Tutorial wird der Code für eine einfache WPF-Branchen-App namens „Contoso Expenses“ bereitgestellt. Im fiktionalen Szenario des Tutorials ist Contoso Expenses eine App, die von leitenden Mitarbeitern der Contoso Corporation verwendet wird, um die von den unterstellten Mitarbeitern eingereichten Spesen nachzuverfolgen. Die leitenden Mitarbeiter sind mit Touchgeräten ausgestattet und möchten die Contoso Expenses-App ohne Maus oder Tastatur verwenden. Leider unterstützt die aktuelle Version der App keine Touchfunktionalität.

Contoso möchte der bestehenden App neue Windows-Features hinzufügen, um die Benutzerfreundlichkeit beim Erstellen von Spesenberichten zu erhöhen. Viele der Features könnten durch das Entwickeln einer neuen UWP-App problemlos implementiert werden. Die vorhandene App ist jedoch komplex und das Ergebnis jahrelanger Arbeit durch verschiedene Teams. Deshalb stellt eine von Grund auf mit neuen Technologie entwickelte App keine Option dar. Das Team sucht nach dem besten Ansatz, der vorhandenen Codebasis neue Features hinzuzufügen.

Zu Beginn des Tutorials ist die Contoso Expenses-App für .NET Framework 4.7.2 konzipiert und verwendet die folgenden Drittanbieterbibliotheken:

  • MVVM Light – eine Basisimplementierung für das MVVM-Muster.
  • Unity – ein Container für die Abhängigkeitseinschleusung.
  • LiteDb – eine eingebettete NoSQL-Projektmappe zum Speichern der Daten.
  • Bogus – ein Tool zum Generieren von Pseudodaten.

Im Tutorial erweiterst du die Contoso Expenses-App mit neuen Windows-Features:

  • Migrieren einer vorhandenen WPF-App zu .NET Core 3.0, um künftig neue und wichtige Szenarien unterstützen zu können
  • Verwenden von XAML Islands zum Hosten der umschlossenen Steuerelemente InkCanvas und MapControl, die vom Windows-Community-Toolkit bereitgestellt werden
  • Verwenden von XAML Islands zum Hosten eines beliebigen UWP-XAML-Standardsteuerelements (in diesem Fall CalendarView)
  • Integrieren adaptiver Karten und Windows-Benachrichtigungen in die App
  • Packen der App mit MSIX und Einrichten einer CI/CD-Pipeline in Azure DevOps, um bei Verfügbarkeit automatisch neue App-Versionen für Tester und Benutzer bereitzustellen

Voraussetzungen

Um dieses Tutorial zu bearbeiten, müssen auf deinem Entwicklungscomputer die folgenden erforderlichen Komponenten installiert sein:

Installiere die folgenden Workloads und optionalen Features mit Visual Studio 2019:

  • .NET Desktopentwicklung
  • Entwicklung für die universelle Windows-Plattform
  • Windows SDK (10.0.18362.0 oder höher)

Herunterladen der Contoso Expenses-Beispiel-App

Bevor du mit dem Tutorial beginnst, lade dir den Quellcode für die Contoso Expenses-App herunter, und stelle sicher, dass du den Code in Visual Studio kompilieren kannst.

  1. Lade den Quellcode für die App über die Registerkarte Releases des AppConsult-WinAppsModernizationWorkshop-Repositorys herunter. Der direkte Link lautet https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases.
  2. Öffnen Sie die ZIP-Datei, und extrahieren Sie sämtliche Inhalte in den Stamm Ihres C:\-Laufwerks. Es wird ein Ordner namens C:\WinAppsModernizationWorkshop erstellt.
  3. Öffne Visual Studio 2019, und doppelklicke auf die Datei C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln, um die Projektmappe zu öffnen.
  4. Stelle sicher, dass du das Contoso Expenses-WPF-Projekt kompilieren, ausführen und debuggen kannst, indem du auf die Schaltfläche Starten klickst oder STRG+F5 drückst.

Erste Schritte

Nachdem du nun über den Quellcode für die Contoso Expenses-Beispiel-App verfügst und bestätigt hast, dass eine Kompilierung in Visual Studio möglich ist, kannst du mit dem Tutorial beginnen:

Wichtige Konzepte

Die folgenden Abschnitte enthalten Hintergrundinformationen zu einigen der wichtigsten Konzepte, die in diesem Tutorial erläutert werden. Wenn du bereits mit diesen Konzepten vertraut bist, kannst du diesen Abschnitt überspringen.

Universelle Windows-Plattform (UWP)

In Windows 8 hat Microsoft einen neuen API-Satz zur Windows-Runtime (WinRT) hinzugefügt. Im Gegensatz zum .NET Framework ist WinRT eine native Ebene mit APIs, die Apps direkt verfügbar gemacht werden. Mit WinRT wurden auch Sprachprojektionen eingeführt, bei denen es sich um Ebenen handelt, die zusätzlich zur Runtime hinzugefügt werden, damit Entwickler neben C++ auch mit Sprachen wie C# und JavaScript interagieren können. Projektionen ermöglichen es Entwicklern, Anwendungen basierend auf WinRT zu erstellen und dabei das C#- und XAML-Wissen zu nutzen, das sie bei der Entwicklung mit dem .NET Framework erworben haben.

In Windows 10 hat Microsoft die universelle Windows-Plattform (Universal Windows Platform, UWP) eingeführt, die auf WinRT basiert. Das wichtigste Merkmal von UWP ist, dass es einen gemeinsamen Satz von APIs für alle Geräteplattformen bietet: Unabhängig davon, ob die App auf einem Desktop, einer Xbox One oder einem HoloLens-Gerät ausgeführt wird, können die gleichen APIs genutzt werden.

In Zukunft werden die meisten neuen Windows-Features über WinRT-APIs verfügbar gemacht, darunter beispielsweise Zeitachse, Project Rome und Windows Hello.

MSIX-Paketerstellung

MSIX ist das moderne Paketerstellungsmodell für Windows-Apps. MSIX unterstützt sowohl UWP-Apps als auch die Erstellung von Desktop-Apps mit Technologien wie Win32, WPF, Windows Forms, Java, Electron und anderen. Wenn du eine Desktop-App als MSIX-Paket packst, kannst du deine App im Microsoft Store veröffentlichen. Deine Desktop-App kann bei der Installation auch eine Paketidentität abrufen, wodurch sie eine größere Anzahl von WinRT-APIs nutzen kann.

Weitere Informationen und Beispiele finden Sie in diesen Artikeln:

XAML Islands

Ab Windows 10, Version 1903, kannst du mithilfe eines Features namens XAML Islands UWP-Steuerelemente auch in anderen als UWP-Desktop-Apps hosten. Mit diesem Feature können Sie Aussehen, Verhalten und Funktionalität Ihrer vorhandenen Desktop-Apps mit den aktuellen Features der Windows-Benutzeroberfläche erweitern, die nur in Form von UWP-Steuerelementen verfügbar sind. Dies bedeutet, dass du UWP-Features, wie etwa Windows Ink, und Steuerelemente mit Unterstützung des Fluent Design-Systems in deinen vorhandenen WPF-, Windows Forms- und C++-Win32-Apps nutzen kannst.

Weitere Informationen findest du unter Hosten von UWP XAML-Steuerelementen in Desktop-Apps (XAML Islands). Dieses Tutorial führt dich durch die Vorgehensweise zur Verwendung von zwei verschiedenen Arten von XAML Islands-Steuerelementen:

  • Die InkCanvas- und MapControl-Steuerelemente im Windows-Community-Toolkit. Diese WPF-Steuerelemente kapseln Schnittstelle und Funktionalität der entsprechenden UWP-Steuerelemente und können wie jedes andere WPF-Steuerelement im Visual Studio-Designer verwendet werden.

  • Das UWP-Steuerelement CalendarView. Hierbei handelt es sich um ein UWP-Standardsteuerelement, das du mithilfe des WindowsXamlHost-Steuerelements im Windows-Community-Toolkit hostest.

.NET Core 3

.NET Core ist ein Open Source-Framework, das eine plattformübergreifende, schlanke und leicht zu erweiternde Version des vollständigen .NET Framework implementiert. Im Vergleich zum vollständigen .NET Framework ist die Startzeit von .NET Core deutlich kürzer, und viele der APIs wurden optimiert.

Während der ersten Releases lag der Schwerpunkt von .NET Core auf der Unterstützung von Web- oder Back-End-Apps. Mit .NET Core kannst du problemlos skalierbare Web-Apps oder APIs erstellen, die unter Windows, Linux oder in Microservice-Architekturen wie Docker-Containern gehostet werden können.

.NET Core 3 ist die neueste Version von .NET Core. Das Highlight dieser Version ist der Support für Windows-Desktop-Apps, einschließlich Windows Forms- und WPF-Apps. Sie können neue und vorhandene Windows-Desktop-Apps unter .NET Core 3 ausführen und alle Vorteile von .NET Core genießen. UWP-Steuerelemente, die über XAML-Inseln gehostet werden, können auch in Windows Forms- und WPF-Apps verwendet werden, die für .NET Core 3 bestimmt sind.

Hinweis

WPF und Windows Forms sind nicht plattformübergreifend, und es ist nicht möglich, WPF oder Windows Forms unter Linux und macOS auszuführen. Die Benutzeroberflächenkomponenten von WPF und Windows Forms hängen weiterhin vom Windows-Renderingsystem ab.

Weitere Informationen finden Sie unter Neues in .NET Core 3.0.