WPF, Windows Forms und WinUI

Neue Features in .NET 9 für Desktopanwendungen

Neue Features in .NET 9 für Desktopanwendungen

WPF, Windows Forms und WinUI

Neue Features in .NET 9 für Desktopanwendungen


Mit WPF, Windows Forms und WinUI 3 hat Microsoft drei UI-Frameworks für Windows-Desktopanwendungen, die vorangetrieben werden sollen. Mit .NET 9.0 erhielten die in .NET enthaltenen Frameworks WPF und Windows Forms einige Neuerungen. Auch wurde das in Windows 11 stark eingesetzte WinUI 3-Framework weiterentwickelt. In diesem Artikel erhalten Sie einen Überblick über die wichtigsten Neuheiten.

Hat man sich beim Start einer neuen Anwendung festgelegt, dass es eine Windows-Desktopanwendung werden soll, stellt sich die Frage: welches Framework? WPF, Windows Forms oder WinUI 3? Zunächst sollte geschaut werden, ob das entsprechende Framework die benötigten Features bietet. Aber auch das Know-how des eigenen Entwickler-Teams spielt eine Rolle und natürlich ist auch entscheidend, wie Microsoft das gewählte Framework in Zukunft unterstützen und weiterentwickeln wird. Lange haben Entwickler:innen darauf gewartet, dass sich Microsoft klar positioniert, was auf der Build-Konferenz im Mai 2024 erfolgte. Microsoft bezog Stellung zu seinen Frameworks zum Entwickeln von Clientanwendungen (Abb. 1). Für native Windows-Anwendungen wird weiterhin auf die Frameworks WPF, Windows Forms und WinUI 3 gesetzt, denn laut Microsoft seien alle eine gute Wahl mit ihren Schwächen und Stärken. Für Cross-Platform-Anwendungen setzt Microsoft auf React Native und .NET MAUI. Für Hybridanwendungen kommen Blazor Hybrid und das WebView2-Element zum Einsatz. Für Webanwendungen sind das Blazor Framework und Progressive Web Apps die Empfehlung.

huber_wpf_winforms_winui_1

Abb. 1: Microsofts Positionierung zu den Clientframeworks

Um also Anwendung mit der XML-basierten UI-Beschreibungssprache XAML zu entwickeln, kommt entweder WPF oder WinUI 3 zum Einsatz. Im Gegensatz zu WPF, was Teil von .NET ist, lassen sich WinUI-3-Anwendungen nicht nur mit .NET und C# programmieren, sondern auch nativ mit C++. Viele native Anwendungen und Elemente unter Windows 11 wurden mit WinUI 3 programmiert, darunter das Startmenü und verschiedenste Anwendungen wie Einstellungen, Calculator, Photos und der Microsoft Store. WinUI 3 bietet also die Basis für viele Windows-Anwendungen, unterstützt C# und C++ und läuft zudem auf den Prozessor-Architekturen x64, x86 und arm64. Darüber hinaus bietet WinUI 3 ein modernes UI mit eingebauten Usability-Features.

Auf der anderen Seite bestätigt Microsoft aber auch, dass WPF eine gute Wahl ist, um neue Anwendungen mit XAML und C# zu entwickeln. WPF ist bewährt seit 2006 und bietet ein großes und stabiles Ökosystem. Es wurde in C# für C# geschrieben und bestehende WPF-Anwendungen wie beispielsweise Visual Studio 2022 lassen sich weiter modernisieren. Auch Windows Forms kommt weiterhin in vielen Unternehmen zum Einsatz und wird somit von Microsoft auch künftig unterstützt und aktiv weiterentwickelt. Es lohnt sich folglich, einen Blick auf die neuesten Features der verschiedenen Windows-Desktopframeworks zu werfen.

Was ist neu in WPF 9.0?

Die WPF erhielt in .NET 9.0 drei zentrale Neuerungen [1]:

  • Windows 11 Theming

  • Unterstützung für die Accent Color

  • Unterstützung für bindestrichbasierte Buchstabenverbindungen

Untersuchen wir, was es genau mit diesen Neuerungen auf sich hat.

Das Windows 11 Theme in WPF

Wird unter Windows 11 eine neue WPF-Anwendung erstellt, sieht sie etwas angestaubt aus, da das moderne Fluent Design von Windows 11 nicht zum Einsatz kommt. Mit .NET 9.0 lässt sich allerdings auch in WPF-Anwendungen das Fluent Design aktivieren, im Folgenden einfach „Windows 11 Theme“ genannt. Dazu gibt es zwei Möglichkeiten:

  1. In der App.xaml-Datei werden die Theme-Ressourcen geladen.

  2. Die neue ThemeMode-Eigenschaft wird entsprechend gesetzt.

Die zweite Möglichkeit hat bisher noch den Status „experimental“ und kann sich somit in zukünftigen Versionen noch ändern.

Für die erste Möglichkeit wird in der App.xaml-Datei die Resources-Eigenschaft des App-Objekts gesetzt (Listing 1). Dabei wird ein ResourceDictionary verwendet, das aus der PresentationFramework.Fluent.dll die im Ordner Themes enthaltene Fluent.xaml-Datei lädt. Diese Fluent.xaml-Datei enthält die Windows 11 Theme Styles für die WPF Controls. Diese Styles werden mit dem Code aus Listing 1 anwendungsweit zur Verfügung stehen und automatisch von den jeweiligen Controls geladen werden. Die PresentationFramework.Fluent.dll als solche ist eine neue WPF-Assembly, die mit .NET 9.0 eingeführt wurde.

Listing 1: App.xaml-Datei

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

Der Code aus Listing 1 lässt sich in einem bestehenden oder neuen WPF-Projekt ab .NET 9 anwenden, um das Windows 11 Theme für die eigene Anwendung zu aktivieren. Im Fall dieses Artikels wird an dieser Stelle ein neues WPF-Projekt mit .NET 9 erstellt. Das Projekt ist via GitHub verfügbar [2]. Damit es im Hauptfenster der Anwendung auch etwas zu sehen gibt, wird die MainWindow.xaml-Datei wie in Listing 2 dargestellt befüllt. Darin befinden sich innerhalb eines StackPanel verschiedene Controls wie TextBox, CheckBox und Button.

Listing 2: MainWindow.xaml-Datei

<Window x:Class="Windows11Theming.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Windows 11 Theming" Height="300" Width="400">
  <StackPanel Margin="10">
    <TextBlock Margin="5">Vorname:</TextBlock>
    <TextBox Margin="5"/>
    <TextBlock Margin="5">Nachname:</TextBlock>
    <TextBox Margin="5"/>
    <CheckBox Margin="5">Ist Entwickler?</CheckBox>
    <Button Content="Speichern" Margin="5"/>
  </StackPanel>
</Window>

Wird die Anwendung gestartet, werden die Controls im modernen Windows 11 Theme dargestellt (Abb. 2). Dabei gibt es neben dem eigentlichen Aussehen auch noch Features bezüglich der Benutzbarkeit (Usability). Beispielsweise zeigt die TextBox mit dem Fokus – in Abbildung 2 jene mit dem Vornamen – ganz rechts ein kleines Kreuz an. Mit einem Klick auf das Kreuz lässt sich der Inhalt der TextBox löschen. Dieses Feature kommt mit dem modernen Windows 11 Theme gratis dazu.

huber_wpf_winforms_winui_2

Abb. 2: Die WPF-Anwendung mit Windows 11 Theme

Ohne die geladene Fluent.xaml-Datei aus Listing 1 oder unter .NET 8 würde die WPF-Anwendung wie in Abbildung 3 dargestellt aussehen. Zugegeben, dieser Look wirkt etwas eingestaubt und das neue Windows 11 Theme lässt die Anwendung um einiges moderner wirken.

huber_wpf_winforms_winui_3

Abb. 3: Die WPF-Anwendung mit Defaultaussehen

Doch damit nicht genug. In den Einstellungen von Windows 11 lässt sich unter Personalization | Colors ein Modus einstellen (Abb. 4); zur Auswahl stehen Light und Dark.

huber_wpf_winforms_winui_4

Abb. 4: In den Settings lässt sich das Theme von Light auf Dark umstellen

Wird der Modus auf Dark umgestellt, passt sich die WPF-Anwendung dynamisch zur Laufzeit an dieses neue Theme an. Wie in Abbildung 5 zu sehen ist, erhalten alle Controls ein dunkles Aussehen. Damit spiegelt die eigene WPF-Anwendung automatisch den ausgewählten Farbmodus der Benutzer:innen wider.

huber_wpf_winforms_winui_5

Abb. 5: Die WPF-Anwendung im Dark Theme

Anstatt das Windows 11 Theme bzw. die dafür notwendigen Ressourcen wie in Listing 1 über die Resources-Eigenschaft des App-Objekts zu aktivieren, lässt sich auch die neue ThemeMode-Eigenschaft nutzen. Diese Eigenschaft ist in der Application-Klasse und auch in der Window-Klasse verfügbar. Somit lässt sich mit dieser ThemeMode-Eigenschaft das gewünschte Theme anwendungsweit oder individuell...