Mit der Veröffentlichung von .NET MAUI 9 setzt Microsoft die Reise fort, die plattformübergreifende App-Entwicklung auf eine stabile Basis zu stellen. Was im Mai 2022 mit .NET MAUI 6 als ambitioniertem Nachfolger von Xamarin.Forms begann, wurde zunächst von Kinderkrankheiten überschattet: Stabilitätsprobleme und fehlende Features sorgten für Frust in der Entwicklercommunity. Mit den Versionen 7 und vor allem 8 verbesserte sich die Situation deutlich, da Microsoft auf neue Features weitgehend verzichtete und stattdessen konsequent auf Stabilisierung und Fehlerbehebung setzte.
Dieser Kurs wird in Version 9 konsequent fortgesetzt. Unternehmen, die neue plattformübergreifende Apps entwickeln oder von Xamarin.Forms auf .NET MAUI umsteigen, profitieren gleichermaßen von einer stabilen Plattform, die sich auf Verlässlichkeit konzentriert. Gleichzeitig liefert .NET MAUI 9 sinnvolle Ergänzungen, die die Arbeit mit der Plattform vielseitiger und produktiver machen.
ZUM NEWSLETTER
Regelmäßig News zur Konferenz und der .NET-Community
Quality first
Entwickler:innen lieben neue Features, doch genau diese lieferte Microsoft mit der neuen Version von .NET MAUI nur in sehr begrenztem Umfang. Stattdessen konzentrierte sich das Team fast ausschließlich auf die Fehlerbehebung. Dieser Fokus war essenziell, nicht nur, um den Anforderungen moderner Anwendungen gerecht zu werden, sondern vor allem, weil seit dem Supportende von Xamarin.Forms am 1. Mai 2024 immer mehr Unternehmen gezwungen sind, von Xamarin.Forms auf .NET MAUI umzusteigen. In dieser Situation sind Stabilität und Zuverlässigkeit entscheidend – Showstopper dürfen schlichtweg nicht auftreten.
Das Ergebnis dieser Strategie kann sich sehen lassen: Zwischen den Versionen 7 und 8 wurden insgesamt 689 Issues in 1 618 Pull Requests geschlossen. Von Version 8 auf 9 stiegen diese Zahlen auf über 2 800 geschlossene Issues und mehr als 1 900 Pull Requests. Die tatkräftige Unterstützung aus der Community hat diese beeindruckende Steigerung ermöglicht.. Nachdem zuvor Einzelpersonen Bugfixes zu Microsofts plattformübergreifendem Framework beigetragen hatten, beteiligte sich der Komponentenhersteller Syncfusion im Sommer dieses Jahres in großem Umfang am MAUI-Projekt. Allein zwischen dem 30. Juli und dem 1. Oktober stammte mehr als die Hälfte aller Community-Pull-Requests von Syncfusion-Mitarbeiter:innen.
Mit der TitleBar macht MAUI weiteres Land auf dem Desktop gut
Obwohl .NET MAUI als echtes Cross-Platform-Framework positioniert wird, das sich gleichermaßen für mobile Geräte und den Desktop eignet, wird es in der Community – ähnlich wie sein Vorgänger Xamarin.Forms – oft als reines Mobile-Framework wahrgenommen, das primär unter Android und iOS eingesetzt wird.
Um dieser Wahrnehmung entgegenzuwirken, hat Microsoft in den letzten Versionen von MAUI gezielt Desktopfeatures eingeführt. Funktionen wie Menüs, Kontextmenüs und Maus-Events haben den Desktop bereits gestärkt. Mit der aktuellen Version 9 kommt nun ein weiteres Feature für den Windows-Desktop hinzu: die TitleBar Control.
Dieses Steuerelement erlaubt es Entwickler:innen, die Titelleiste von Windows-Desktop-Anwendungen umfassend anzupassen. Wie bei modernen Office-Anwendungen kann die Titelleiste nun neben einem App-Icon und einem Titel auch einen Untertitel sowie drei separate Inhaltsbereiche enthalten. Diese bieten in den Bereichen LeadingContent, Content und TrailingContent Platz für interaktive Elemente wie Suchleisten, Buttons oder zusätzliche Icons, was die Titelleiste funktionaler und moderner macht.
Listing 1 zeigt die Definition einer TitleBar. Das Beispiel veranschaulicht, wie man Icons, eine Suchleiste und weitere Inhalte in die Titelleiste einfügen kann. Zusätzlich lassen sich Titel, Untertitel und das App-Icon individuell anpassen, um die Titelleiste an das Design Ihrer Anwendung anzupassen. Das Ergebnis ist in Abbildung 1 zu sehen.
<?xml version="1.0" encoding="utf-8" ?> <Window xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DontLetMeExpire.AppWindow"> <Window.TitleBar> <TitleBar Title="Don't let me expire" Icon="logo.png" Subtitle="Stop wasting food" HeightRequest="50"> <TitleBar.LeadingContent> <Label Text="🍇" VerticalOptions="Center"/> </TitleBar.LeadingContent> <TitleBar.Content> <SearchBar Placeholder="Search" MaximumWidthRequest="300" MaximumHeightRequest="40"/> </TitleBar.Content> <TitleBar.TrailingContent> <Label Text="🍎" VerticalOptions="Center"/> </TitleBar.TrailingContent> </TitleBar> </Window.TitleBar> </Window>
Abb. 1: Das TitleBar-Steuerelement verleiht Windows-Apps ein modernes Design, das sich an Office-Anwendungen orientiert
Derzeit ist das TitleBar-Steuerelement ausschließlich für Windows verfügbar. Microsoft plant jedoch, die Unterstützung in einem zukünftigen Update auf Mac Catalyst zu erweitern. Damit würde das Steuerelement auch auf dem Mac verfügbar sein und zur plattformübergreifenden Konsistenz beitragen, was die Entwicklung von Desktop-Apps für mehrere Plattformen erheblich erleichtert.
HybridWebView: Web trifft auf native App-Entwicklung
Das neue HybridWebView-Steuerelement in .NET MAUI 9 bietet die Möglichkeit, Webinhalte nahtlos in plattformübergreifende Anwendungen zu integrieren. Ursprünglich als experimentelles Projekt von Microsoft-Mitarbeiter Eilon Lipton gestartet [1], hat sich das Steuerelement in den letzten zwei Jahre zu einem vollwertigen Bestandteil des Frameworks entwickelt.
Während das klassische WebView-Steuerelement, das es bereits seit der ersten .NET-MAUI-Version und schon unter Xamarin gab, die Darstellung von Webinhalten wie HTML, CSS und JavaScript ermöglichte, geht HybridWebView einen Schritt weiter: Es erlaubt eine bidirektionale Kommunikation zwischen der Webansicht und der nativen App. Dadurch können Webtechnologien und native Funktionen optimal miteinander kombiniert werden.
HybridWebView ist eine ideale Wahl für hybride Anwendungen, die auf Frameworks wie Angular, React, Svelte oder Vue basieren. Anders als die Blazor-Integration über BlazorWebView, die ausschließlich auf das .NET-Ökosystem ausgelegt ist, ermöglicht HybridWebView die nahtlose Einbindung beliebiger Webframeworks. Bestehende Webanwendungen können einfach in den Ordner Resources\Raw\wwwroot kopiert werden. Da die Inhalte lokal bereitgestellt werden, ist keine Internetverbindung für die Ausführung erforderlich.
Für neue Projekte bietet sich HybridWebView besonders für Teams an, die sich stärker auf Webtechnologien wie HTML, CSS und JavaScript fokussieren und weniger Erfahrung oder Vorlieben in C# und XAML haben. Es erlaubt diesen Teams, ihre vorhandene Webexpertise zu nutzen, ohne dabei auf die Vorteile nativer Funktionen wie den Zugriff auf Gerätesensoren, Offlinefähigkeiten oder die tiefere Integration ins Betriebssystem verzichten zu müssen.
Darüber hinaus eignet sich HybridWebView perfekt für Szenarien, in denen bestehende HTML- und JavaScript-Anwendungen als App ausgeliefert und durch native Funktionen ergänzt werden sollen. Es schlägt eine Brücke zwischen der Flexibilität des Webs und der Leistungsfähigkeit nativer Apps – eine ideale Lösung für hybride Projekte, die das Beste aus beiden Welten verbinden möchten.
Das HybridWebView in der Praxis
Im folgenden Beispiel betrachten wir die Einbettung des HybridWebView-Steuerelements in eine .NET-MAUI-App sowie die bidirektionale Kommunikation zwischen der App und der eingebetteten Webanwendung.
In Listing 2 sehen wir die Definition einer einfachen Bildschirmmaske, die aus einem Eingabefeld, einem Button und einer HybridWebView besteht. Beim Klick auf den Button wird der Inhalt des Eingabefelds über die HybridWebView an die Webanwendung gesendet. Gleichzeitig sollen Nachrichten aus der Webanwendung empfangen und in der App verarbeitet werden können.
<Grid RowDefinitions="auto, *" ColumnDefinitions="*,auto"> <!-- Eingabefeld für die Nachricht --> <Entry x:Name="messageText" Grid.Column="0" Placeholder="Bitte Nachricht eintragen" /> <!-- Button zum Senden der Nachricht --> <Button Clicked="OnSendMessageButtonClicked" Grid.Column="1" Text="Senden" /> <!-- HybridWebView für die Webansicht --> <HybridWebView x:Name="hybridWebView" Grid.Row="1" RawMessageReceived="OnHybridWebViewRawMessageReceived" /> </Grid>
Den zugehörigen C#-Code für die Interaktion sehen wir in Listing 3. Hier gibt es zwei zentrale Ereignisbehandlungsroutinen:
- OnSendMessageButtonClicked: Diese Methode ruft auf dem HybridWebView Control die Funktion SendRawMessage auf, um Nachrichten von der App an die Webanwendung zu senden.
- OnHybridWebViewRawMessageReceived: Diese Methode verarbeitet Nachrichten, die aus der Webanwendung empfangen werden, und zeigt sie in einem einfachen Dialogfenster an.
private void OnSendMessageButtonClicked(object sender, EventArgs e) { hybridWebView.SendRawMessage(messageText.Text); } // Nachricht aus der Webansicht empfangen und anzeigen private async void OnHybridWebViewRawMessageReceived(object sender, HybridWebViewRawMessageReceivedEventArgs e) { await DisplayAlert("Nachricht empfangen", e.Message, "OK"); }
Damit die Kommunikation zwischen der nativen App und der Webanwendung funktioniert, muss der Webanwendung zusätzlicher JavaScript-Code hinzugefügt werden. Dieser stellt sicher, dass Nachrichten empfangen und gesendet werden können. Einen vollständigen Überblick über den benötigten Code findet man in der offiziellen .NET-MAUI-Dokumentation [2]. Listing 4 zeigt einen Auszug aus der Datei hybridwebview.js, die als Kommunikationsschnittstelle dient.
window.HybridWebView = { "Init": function Init() { function DispatchHybridWebViewMessage(message) { const event = new CustomEvent("HybridWebViewMessageReceived", { detail: { message: message } }); window.dispatchEvent(event); } // Weitere Implementierung }, "SendRawMessage": function SendRawMessage(message) { // Implementierung der Methode SendRawMessage }, }; window.HybridWebView.Init();
Die Kommunikation innerhalb der JavaScript-Anwendung mit der .NET-MAUI-App zeigen Listing 5 und Listing 6. In Listing 5 sehen wir den Empfang von Nachrichten in JavaScript aus .NET, während Listing 6 den Versand von Nachrichten aus JavaScript an .NET zeigt.
function receiveMessageFromMaui() { const hybridWebView = window.HybridWebView; if (hybridWebView) { window.addEventListener("HybridWebViewMessageReceived", (message) => { alert("Nachricht von der App: " + message); }); } }
const message = 'Hallo von JavaScript'; const hybridWebView = window.HybridWebView; if (hybridWebView) { hybridWebView.SendRawMessage(message); }
Der Beispielcode ist bewusst einfach gehalten. Er zeigt jedoch, wie leistungsfähig und gleichzeitig einfach die bidirektionale Kommunikation zwischen JavaScript und .NET MAUI mit dem HybridWebView-Steuerelement umgesetzt werden kann. In einer echten Anwendung könnte man problemlos die gesamte Benutzeroberfläche mit HTML und JavaScript realisieren und C# zur Interaktion mit der Hardware nutzen.
ZUM NEWSLETTER
Regelmäßig News zur Konferenz und der .NET-Community
Überraschender Rückenwind für .NET MAUI: Das Open-Source-Toolkit von Syncfusion
Während die Veröffentlichung der TitleBar und des HybridWebView bereits längere Zeit vor dem offiziellen .NET-MAUI-9-Release bekannt waren, sorgte die Partnerschaft mit dem Komponentenhersteller Syncfusion für die größte Überraschung in der Community. Neben der aktiven Mitarbeit an Issues im .NET-MAUI-Repository entschied sich Syncfusion, über zehn Steuerelemente unter der Open-Source-MIT-Lizenz bereitzustellen. Die Liste der neuen Steuerelemente umfasst unter anderem:
- ein Chart Control mit mehreren Diagrammtypen
- ein Kalendersteuerelement mit anpassbaren Ansichten
- ein Bottom Sheet zum Einblenden zusätzlicher Inhalte
- eine Carousel View für touchfähige Galerien
- Diverse Steuerelemente zur Texteingabe, darunter ein Numeric Entry
- Buttons und Chips
- einen Navigation Drawer (seitliches Navigationsmenü)
- ein Tab Control
- visuelle Effekte wie Shimmer und Effects View für moderne UI-Elemente
- verschiedene weitere Steuerelemente
Viele Entwickler:innen dürften sich besonders über die Chart-Steuerelemente freuen. Die Visualisierung von Daten in Diagrammen ist ein gängiges und oft unverzichtbares Feature in modernen Apps. Da .NET MAUI bisher keine nativen Steuerelemente für diesen Zweck bereitstellte, waren Entwickler:innen bislang häufig auf kommerzielle Bibliotheken angewiesen.
Eine detaillierte Vorstellung des Toolkits hat Tam Hanna bereits in seinem Artikel „Syncfusion Toolkit für .NET MAUI“ in der Ausgabe 2.2025 des Windows Developer vorgenommen [3]. Daher wird in diesem Artikel auf eine ausführliche Betrachtung inklusive Codebeispielen verzichtet. Stattdessen möchte ich die Steuerelemente in den Abbildungen 2 und 3 in Aktion zeigen. Abbildung 2 zeigt den Einsatz des Chart Controls, während Abbildung 3 das Shimmer Control demonstriert, eine moderne Form der Ladeanimation.
Abb. 2: Dank Syncfusion kann man nun auch Diagramme in .NET-MAUI-Apps anzeigen
Abb. 3: Mit dem Syncfusion Shimmer Control kann man Ladezeiten in Apps ansprechend überbrücken
Neue Projektvorlagen: Blazor Hybrid und Multi-Project-Apps
Eine auf den ersten Blick offensichtliche Neuerung von .NET MAUI 9 betrifft die Projektvorlagen. Mit .NET MAUI 9 wurden zwei neue Vorlagen eingeführt, die Entwickler:innen beim Start neuer Projekte zur Verfügung stehen. Abbildung 4 zeigt die beiden neuen Vorlagen .NET MAUI Blazor Hybrid and Web App und .NET MAUI Multi-Project App im Dialog zur Anlage eines neuen Projekts.
Abb. 4: .NET MAUI 9 bringt zwei neue Projektvorlagen mit
Die Vorlage .NET MAUI Blazor Hybrid and Web App richtet sich speziell an Entwickler:innen, die sowohl mit Blazor als auch mit MAUI arbeiten möchten. Sie ermöglicht es, Code für Webanwendungen und native MAUI-Apps gemeinsam zu nutzen. Die Projektstruktur umfasst ein .NET-MAUI-Projekt, ein oder zwei Blazor-Projekte und eine Razor-Klassenbibliothek mit der Endung .Shared (siehe Abbildung 5).
Abb. 5: Die Struktur einer „.NET MAUI Blazor Hybrid and Web App“ bringt eine Razor-Klassenbibliothek für gemeinsam genutzten Quellcode mit
In der Shared-Bibliothek befinden sich die gemeinsam genutzten Benutzeroberflächen in Razor, wie z. B. Counter.razor, Home.razor und Weather.razor. Sowohl das .NET-MAUI- als auch das Blazor-Projekt greifen auf diese geteilten Komponenten zu, wodurch sie sowohl im Webbrowser als auch in nativen Anwendungen angezeigt werden können. Abbildung 6 zeigt die Ausgabe einer solchen Anwendung – dargestellt im Webbrowser, auf Android und als Windows-Desktop-App.
Abb. 6: Mit Blazor kommt man sowohl ins Web als auch auf den Desktop und mobile Endgeräte
Die zweite neue Vorlage, .NET MAUI Multi-Project App, orientiert sich an einer traditionelleren Struktur und erinnert an das bekannte Modell aus Xamarin.Forms. Ein Projekt wird für den plattformübergreifenden Code angelegt, während für jede Zielplattform (z. B. Android, iOS oder Windows) ein separates Projekt erstellt wird (siehe Abbildung 7).
Abb. 7: Die Struktur einer „.NET MAUI Multi-Project App“ entspricht der traditionellen Xamarin.Forms-Projektstruktur
Diese Vorlage ist besonders für Entwickler:innen interessant, die von Xamarin.Forms auf MAUI migrieren und mit der Multi-Project-Struktur vertraut sind. Darüber hinaus kann sie in Projekten hilfreich sein, bei denen eine strikte Trennung zwischen Plattform- und plattformübergreifendem Code erforderlich ist. Für die Migration bestehender Xamarin.Forms-Anwendungen kann diese Vorlage ebenfalls Vorteile bieten, da die Struktur den Übergang erleichtert.
Best Practices frei Haus
Eine weitere Neuerung in .NET MAUI 9 ist die Option Include Sample Content, die bei der Anlage eines neuen Projekts verfügbar ist. Diese Option erlaubt es Entwickler:innen, mit einer voll funktionsfähigen Beispielanwendung zu starten, anstatt von Grund auf neu beginnen zu müssen. Die Vorlage demonstriert einige Best Practices, wie den Einsatz des MVVM-Entwurfsmusters, Datenpersistenz per SQLite sowie den Einsatz des .NET MAUI Community Toolkits und der Syncfusion-Steuerelemente. Dank der sauberen Struktur, die Abbildung 8 zeigt, kann eine mit dieser Vorlage generierte App als interessantes Lernprojekt angesehen werden. Abbildung 9 zeigt die laufende App, die sowohl den Dark als auch den Light Mode unterstützt.
Abb. 8: Wählt man bei der Projektanlage die Option „Include sample content“ erhält man eine umfangreiche Beispielanwendung
Abb. 9: Die Beispielanwendung in Aktion
Weitere Neuerungen in .NET MAUI 9
Neben den neuen Steuerelementen und Projektvorlagen bringt .NET MAUI 9 auch einige kleinere, aber dennoch praktische Verbesserungen mit sich.
Eine dieser Neuerungen sind zwei optionale Handler für iOS und Mac Catalyst, die die Performance der CollectionView und der CarouselView verbessern. Diese neuen Handler können in der Datei MauiProgram.cs registriert werden, wie Listing 7 zeigt.
#if IOS || MACCATALYST builder.ConfigureMauiHandlers(handlers => { handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>(); handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>(); }); #endif
Eine weitere Verbesserung betrifft Eingabefelder: .NET MAUI 9 bietet eine erweiterte Unterstützung für die Eingabe von Datums- und Uhrzeitwerten sowie Passwörtern über die virtuelle Bildschirmtastatur.
Darüber hinaus unterstützt die neue Version nun Android 15 (API Level 35) und führt Android Asset Packs ein. Diese Erweiterung ist vor allem für Entwickler:innen von Spielen und datenintensiven Anwendungen interessant. Während die bisherige Größenbeschränkung von Google Play für Standardpakete bei 200 MB lag, erlauben Asset Packs das Hochladen von bis zu 2 GB großen Paketen. Diese Funktionalität bietet deutlich mehr Flexibilität bei der Entwicklung und Verteilung großer Apps und ist ein bedeutender Schritt für umfangreiche und speicherintensive Anwendungen.
Fazit
.NET MAUI 9 setzt weiterhin den Schwerpunkt auf Stabilität und Fehlerbehebung – ein entscheidender Faktor, insbesondere für Unternehmen, die bestehende Xamarin.Forms-Apps zu .NET MAUI migrieren müssen.
Auch wenn Microsoft selbst in diesem Release nur wenige neue Funktionen liefert, stechen die neuen Projektvorlagen hervor, die die Entwicklung für Web- und Desktopanwendungen gleichermaßen vereinfachen. Besonders die Option Include Sample Content, die Best Practices direkt integriert, erleichtert den Einstieg und bietet eine solide Grundlage für neue Projekte. Die Integration des HybridWebView und das TitleBar-Steuerelement zeigen zudem, wie MAUI sich zunehmend als echtes Cross-Platform-Framework etabliert – nicht nur für mobile Geräte, sondern auch für den Desktop.
Durch die Partnerschaft mit Syncfusion schließt .NET MAUI zudem wichtige Lücken, die Entwickler:innen bisher mit kommerziellen Bibliotheken füllen mussten.
Insgesamt bietet .NET MAUI 9 eine stabile und vielseitige Basis, die die plattformübergreifende App-Entwicklung effizienter und attraktiver macht.
Links & Literatur
[1] https://github.com/Eilon/MauiHybridWebView
[3] https://entwickler.de/dotnet/syncfusion-toolkit-for-net-maui