Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 6 Min.

Endlich Land in Sicht dank MAUI 9

.NET MAUI 9 bringt kaum Neues, dafür aber die Stabilität, die Xamarin.Forms-Entwickler zur Migration ihrer bestehenden Apps dringend benötigen.
© dotnetpro
Nach mehrjähriger Entwicklungsarbeit präsentierte Microsoft im Mai 2022 das Cross-Plattform-Framework
.NET MAUI 6 als evolutionären Xamarin.Forms-Nachfolger. Trotz vielversprechender Neuerungen wie dem Single-­Pro­ject-Ansatz und einer neuen, lose gekoppelten Steuerelementarchitektur empfanden viele Entwickler .NET MAUI aufgrund erheblicher Stabilitätsprobleme nicht als Fortschritt, sondern eher als Rückschritt.Als Reaktion auf diese Wahrnehmung setzte Microsoft bei den beiden Nachfolgeversionen 7 und 8 den Fokus der Entwicklung vorrangig auf die Stabilisierung des Produkts und führte nur marginale Neuerungen ein. Diese Strategie zahlte sich aus: Ab Version 8 lässt sich von einer stabilen Entwickler­erfahrung sprechen. Leider gibt es trotz der vielen Stabilitätsverbesserungen immer noch kritische Fehler. Außerdem fehlen einige Funktionen unter .NET MAUI, die unter Xama-
rin.Forms vorhanden waren.Um dies zu adressieren, setzt Microsoft mit .NET MAUI 9 die Strategien der Versionen 7 und 8 fort, indem der Fokus weiterhin auf Fehlerbehebung, verbesserte Testautomatisierung und das Ergänzen fehlender Funktionen aus Xamarin.Forms gelegt wird. Für .NET MAUI 9 bedeutet dies trotz über 1000 Commits in mehr als 3500 Dateien vornehmlich Bugfixes und neue automatisierte Tests, wodurch kaum neue Funktionen eingeführt werden.Die Entscheidung des .NET-MAUI-Teams, für .NET MAUI 9 den Schwerpunkt erneut auf Fehlerbehebung statt auf die Einführung neuer Funktionen zu legen, ist eine nachvollziehbare Stra­tegie, insbesondere mit Blick auf das Support-Ende von Xamarin.Forms vom 1. Mai 2024. Seit diesem Datum sind viele Xamarin.Forms-Entwickler gezwungen, ihre Apps kurzfristig auf .NET MAUI zu migrieren. Der weitere Fokus auf Qualität statt Funktionsvielfalt bei .NET MAUI 9 stellt eine solide Basis für neue Apps und Xamarin.Forms-Migrationen sicher. In der Praxis bedeutet dies, dass sich Entwickler auf eine robustere Plattform verlassen können, was letztendlich die Qualität und Zuverlässigkeit der Endprodukte verbessert.Die Konzentration auf Stabilität und Fehlerbehebung bedeutet jedoch nicht, dass es keine neuen Funktionen in .NET MAUI 9 gibt. Einige wenige Neuerungen haben es in die neue Version geschafft. Hierzu gehören neue Projektvorlagen und zwei neue Steuerelemente.

Neue Projektvorlagen

Die auffälligsten Neuerungen von .NET MAUI 9 sind die beiden neuen Projektvorlagen .NET MAUI Blazor Hybrid and Web App und .NET MAUI Multi-Project App, die bei der Anlage eines neuen Projekts zur Auswahl stehen (siehe Bild 1).
Der Dialog zum Erstellen eines neuen Projekts bietet ab .NET MAUI 9 zwei neue Projektvorlagen (Bild 1) © Autor
Die neue Projektvorlage .NET MAUI Blazor Hybrid and Web App richtet sich primär an Blazor-Entwickler, die ihren Quellcode im Web und in einer MAUI-App wiederverwenden möchten. Bild 2 zeigt die Struktur eines mit der neuen Projektvorlage erstellten Projekts. Wie Sie dem Screenshot entnehmen können, wird von der Projektanlage neben einem .NET-MAUI- und einem Blazor-Projekt eine Razor-Klassenbibliothek mit der Endung .Shared angelegt. In diesem Projekt befinden sich die geteilten Bildschirmmasken, die sowohl im Web als auch in der App angezeigt werden können. Sowohl das .NET-MAUI-Projekt als auch das Blazor-Projekt verweisen auf die Razor-Klassenbibliothek und können somit die dort angelegten Seiten Counter.razor, Home.razor und Weather.razor darstellen. Bild 3 zeigt die laufende Anwendung von links nach rechts im Webbrowser, unter Android und als .NET-MAUI-Windows-Desktop-Anwendung.
Die Projektstruktur eines Projekts vom Typ .NET MAUI Blazor Hybrid and Web App (Bild 2) © Autor
Eine Blazor-Anwendung im Web sowie unter Android und Windows als MAUI-Anwendung (Bild 3) © Autor
Die zweite neue Projektvorlage, .NET MAUI Multi-Project App, wirkt auf den ersten Blick wie ein Schritt zurück in die Vergangenheit. Ein mit dieser Vorlage angelegtes Projekt verfügt über ein Projekt für den geteilten Quellcode und ein weiteres je Zielplattform (siehe Bild 4). Dies erinnert an Xamarin.Forms, denn auch dort gab es ein Projekt je Zielplattform sowie ein geteiltes Projekt für den plattformübergreifenden Quellcode. Diese Vorlage richtet sich vor allem an Xamarin.Forms-Entwickler, die mit der traditio­nellen Projektstruktur vertrauter sind als mit dem neueren Single-Project-Ansatz. Zudem erleichtert diese Struktur die ­manuelle Migration bestehender Xama-
rin.Forms-Anwendungen.
Die Projektstruktur einer .NET-MAUI-Multi-Project-Projektmappe (Bild 4) © Autor

.NET MAUI liebt JavaScript

Neben den neuen Projektvorlagen und zahlreichen Fehlerkorrekturen haben es auch zwei neue Steuerelemente in
.NET MAUI 9 geschafft, das HybridWebView-Control und das TitleBar-Steuerelement.Das HybridWebView-Steuerelement, das zuvor zwei Jahre lang als experimentelles Steuerelement im GitHub-Reposi­tory von Microsoft-Mitarbeiter Eilon Lipton (siehe [1]) entwickelt wurde, ermöglicht die Ausführung von HTML, Java­Script und CSS in .NET-MAUI-Apps. Zusätzlich bietet es eine Schnittstelle für die Kommunikation zwischen JavaScript und C#. Damit ist es nun möglich, einen Teil der Anwendung oder sogar die gesamte Anwendung mit Webtechnologien zu entwickeln. Diese Technik war zwar bereits seit .NET MAUI 6 mit Blazor möglich, doch mit dem HybridWebView-Control können nun auch Anwendungen, die in anderen Webframeworks wie Angular, React, Svelte oder Vue geschrieben wurden, integriert werden. Dazu wird einfach ein neuer Ordner wwwroot im Verzeichnis Resources\raw angelegt (siehe Bild 5) und die bestehende Webanwendung dorthin kopiert. Die eingebettete JavaScript-Anwendung kann anschließend über ein HybridWebViewElement in eine XAML-Seite integriert werden (siehe Listing 1), ohne dass eine Internetverbindung für die Ausführung der webbasierten App benötigt wird. Weitere Informationen zur Integration des HybridWebView-Controls finden Sie unter [2].
.NET MAUI 9 ermöglicht es, beliebige JavaScript-Webanwendungen mit Ihrer App auszuliefern (Bild 5) © Autor
Listing 1: Einsatz des neuen HybridWebView-Steuerelements
<span class="php"><span class="hljs-meta"><?</span>xml version=<span class="hljs-string">"1.0"</span> encoding=<span class="hljs-string">"utf-8"</span> <span class="hljs-meta">?></span></span><br/><span class="hljs-tag"><<span class="hljs-name">ContentPage</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://schemas.microsoft.com/</span></span><br/><span class="hljs-tag"><span class="hljs-string">                    dotnet/2021/maui"</span></span><br/><span class="hljs-tag">             <span class="hljs-attr">xmlns:x</span>=<span class="hljs-string">"http://schemas.microsoft.com/</span></span><br/><span class="hljs-tag"><span class="hljs-string">                      winfx/2009/xaml"</span></span><br/><span class="hljs-tag">             <span class="hljs-attr">x:Class</span>=<span class="hljs-string">"HybridWebViewDemo.MainPage"</span>></span><br/>  <span class="hljs-tag"><<span class="hljs-name">HybridWebView</span> </span><br/><span class="hljs-tag">    <span class="hljs-attr">x:Name</span>=<span class="hljs-string">"myHybridWebview"</span></span><br/><span class="hljs-tag">    <span class="hljs-attr">RawMessageReceived</span>=</span><br/><span class="hljs-tag">      <span class="hljs-string">"myHybridWebview_RawMessageReceived"</span>/></span><br/><span class="hljs-tag"></<span class="hljs-name">ContentPage</span>></span> 

Neue Titelleiste vorerst nur unter Windows

Das zweite neue Steuerelement ist das TitleBar-Control, mit dem Sie das Aussehen der Titelleiste Ihrer App unter Windows anpassen können. Wie Sie in Bild 6 sehen, können Sie das Menü-Icon verändern, ein App-Icon vergeben und den Titel sowie den Unter­titel konfigurieren. Außerdem haben Sie die Möglichkeit, über die beiden Inhaltsbereiche Content und TrailingContent interaktive Elemente wie zum Beispiel Eingabefelder, Suchleisten, Buttons oder anklickbare Bilder hinzuzufügen, wie man es von zum Beispiel Microsoft Teams oder den modernen Microsoft-Office-Programmen kennt.
Die neue Titelleiste unter Windows (Bild 6) © Autor
Die Anpassung der Titelleiste können Sie entweder im XAML-Code oder per C#-Implementierung vornehmen. Listing 2 enthält die C#-Variante, deren Ergebnis Bild 6 zeigt. Zum jetzigen Zeitpunkt ist das neue Steuerelement nur unter Windows verfügbar. Zukünftige Updates sollen die Unterstützung auf Mac Catalyst ausweiten, wodurch eine plattformübergreifende Konsistenz gewährleistet wird.
Listing 2: Aussehen und Verhalten der Titelleiste unter Windows mit dem TitleBar-Steuerelement anpassen
protected override void OnAppearing()<br/>{<br/>  base.OnAppearing();<br/>  // Aussehen der Titelleiste anpassen<br/>  Window.<span class="hljs-attr">TitleBar</span> = new TitleBar<br/>  {<br/>    // Menü-Icon verändern<br/>    <span class="hljs-attr">LeadingContent</span> = new ImageButton<br/>    {<br/>      <span class="hljs-attr">Source</span> = <span class="hljs-string">"menu.png"</span><br/>    },<br/>    // App-Icon<br/>    <span class="hljs-attr">Icon</span> = <span class="hljs-string">"bolt.png"</span>,<br/>    // Titel der App<br/>    <span class="hljs-attr">Title</span> = <span class="hljs-string">"App Title"</span>,<br/>    // Untertitel der App<br/>    <span class="hljs-attr">Subtitle</span> = <span class="hljs-string">"App Subtitle"</span>,<br/>    // Hauptinhalt der Titelleiste<br/>    <span class="hljs-attr">Content</span> = new SearchBar<br/>    {<br/>      <span class="hljs-attr">Placeholder</span> = <span class="hljs-string">"Suche"</span>,<br/>      <span class="hljs-attr">MaximumWidthRequest</span> = <span class="hljs-number">300</span>, <br/>      <span class="hljs-attr">Margin</span> = <span class="hljs-number">4</span>,<br/>      <span class="hljs-attr">FontSize</span> = <span class="hljs-number">16</span>,<br/>      <span class="hljs-attr">HeightRequest</span> = <span class="hljs-number">32</span>,<br/>      <span class="hljs-attr">BackgroundColor</span> = Colors.White<br/>    },<br/>    // Sekundärer Inhalt der Titelleiste<br/>    <span class="hljs-attr">TrailingContent</span> =<br/>    new HorizontalStackLayout<br/>    {<br/>      <span class="hljs-attr">Spacing</span> = <span class="hljs-number">8</span>,<br/>      <span class="hljs-attr">Children</span> =<br/>      {<br/>        new Label<br/>        {<br/>          <span class="hljs-attr">Text</span> = <span class="hljs-string">"Wilhelm Brause"</span>,<br/>          <span class="hljs-attr">VerticalOptions</span> = LayoutOptions.Center,<br/>        },<br/>        new Image<br/>        {<br/>          <span class="hljs-attr">Source</span> = <span class="hljs-string">"favorites.png"</span>,<br/>          <span class="hljs-attr">MaximumHeightRequest</span> = <span class="hljs-number">24</span>,<br/>          <span class="hljs-attr">MaximumWidthRequest</span> = <span class="hljs-number">24</span>,<br/>          <span class="hljs-attr">GestureRecognizers</span> =<br/>          {<br/>            new TapGestureRecognizer<br/>            {<br/>              <span class="hljs-attr">Command</span> = new Command(() => <br/>                DisplayAlert(<span class="hljs-string">"Alert"</span>, <br/>                <span class="hljs-string">"You tapped the favorites icon"</span>, <span class="hljs-string">"OK"</span>))<br/>            }<br/>          }<br/>        }<br/>      }<br/>    }<br/>  };<br/>} 

Weitere Neuerungen in .NET MAUI 9

.NET MAUI 9 liefert neben den bereits erwähnten neuen Steuerelementen und Projektvorlagen noch einige kleinere Neuerungen. Dazu gehören zwei neue optionale Handler für iOS und Mac Catalyst, die die Performance der CollectionView und der CarouselView verbessern. Listing 3 zeigt, wie Sie die beiden Handler in der Datei MauiProgram.cs registrieren können.
Listing 3: Registrierung der iOS- und Mac-Catalyst-Handler CollectionViewHandler2 und CarouselViewHandler2
<span class="hljs-meta">#<span class="hljs-meta-keyword">if</span> IOS || MACCATALYST</span><br/><span class="hljs-meta">builder.ConfigureMauiHandlers(handlers =></span><br/><span class="hljs-meta">{</span><br/><span class="hljs-meta">  handlers.AddHandler<span class="hljs-meta-string"><Microsoft.Maui.Controls</span></span><br/><span class="hljs-meta"><span class="hljs-meta-string">    .CollectionView, Microsoft.Maui.Controls</span></span><br/><span class="hljs-meta"><span class="hljs-meta-string">    .Handlers.Items2.CollectionViewHandler2></span>();</span><br/><span class="hljs-meta">  handlers.AddHandler<span class="hljs-meta-string"><Microsoft.Maui.Controls</span></span><br/><span class="hljs-meta"><span class="hljs-meta-string">    .CarouselView, Microsoft.Maui.Controls.Handlers</span></span><br/><span class="hljs-meta"><span class="hljs-meta-string">    .Items2.CarouselViewHandler2></span>();</span><br/><span class="hljs-meta">});</span><br/><span class="hljs-meta">#<span class="hljs-meta-keyword">endif</span></span> 
Eine weitere Neuerung betrifft Eingabefelder, für die .NET MAUI 9 eine verbesserte Eingabeunterstützung für Datums- und Uhrzeitwerte sowie Passwörter durch die virtuelle Bildschirmtastatur bereitstellt.Zudem erweitert die neueste Version die Unterstützung auf Android 15 (API Level 35) und führt Android-Asset-Packs ein. Diese sind besonders für Spiele- und App-Entwickler relevant, deren Produkte die Standardpaketgröße von Google Play überschreiten. Mit Asset Packs können nun Pakete bis zu 2 GByte statt der üblichen 200 MByte hochgeladen werden, was die Flexibilität in der App-Entwicklung und -Distribution signifikant steigert.

Fazit

NET MAUI 9 unterscheidet sich auf den ersten Blick kaum von seinem Vorgänger .NET MAUI 8. Schließlich gibt es nur wenige offensichtliche Neuerungen. Die wirklichen Vorteile liegen jedoch, wie eingangs erwähnt, unter der Haube. Mit der Version 9 folgt Microsoft einmal mehr dem Ruf der Entwicklergemeinde und legt den Fokus auf die Stabilität des Produkts, anstatt eine Vielzahl neuer Funktionen zu implementieren. Davon profitieren nicht nur Entwickler, die neue Apps mit .NET MAUI entwickeln, sondern vor allem auch diejenigen, die ihre bestehende App von Xamarin.Forms auf .NET MAUI migrieren. Eine Liste sämtlicher Neuerungen von .NET MAUI 9 finden Sie unter [3].

Fussnoten

  1. .NET MAUI HybridWebView experiment auf GitHub, http://www.dotnetpro.de/SL2411MAUI1
  2. Microsoft Learn, HybridWebView in .NET 9, http://www.dotnetpro.de/SL2411MAUI2
  3. Microsoft Learn, What’s new in .NET MAUI for .NET 9, http://www.dotnetpro.de/SL2411MAUI3

Neueste Beiträge

DWX hakt nach: Wie stellt man Daten besonders lesbar dar?
Dass das Design von Websites maßgeblich für die Lesbarkeit der Inhalte verantwortlich ist, ist klar. Das gleiche gilt aber auch für die Aufbereitung von Daten für Berichte. Worauf besonders zu achten ist, erklären Dr. Ina Humpert und Dr. Julia Norget.
3 Minuten
27. Jun 2025
DWX hakt nach: Wie gestaltet man intuitive User Experiences?
DWX hakt nach: Wie gestaltet man intuitive User Experiences? Intuitive Bedienbarkeit klingt gut – doch wie gelingt sie in der Praxis? UX-Expertin Vicky Pirker verrät auf der Developer Week, worauf es wirklich ankommt. Hier gibt sie vorab einen Einblick in ihre Session.
4 Minuten
27. Jun 2025
„Sieh die KI als Juniorentwickler“
CTO Christian Weyer fühlt sich jung wie schon lange nicht mehr. Woran das liegt und warum er keine Angst um seinen Job hat, erzählt er im dotnetpro-Interview.
15 Minuten
27. Jun 2025
Miscellaneous

Das könnte Dich auch interessieren

UIs für Linux - Bedienoberflächen entwickeln mithilfe von C#, .NET und Avalonia
Es gibt viele UI-Frameworks für .NET, doch nur sehr wenige davon unterstützen Linux. Avalonia schafft als etabliertes Open-Source-Projekt Abhilfe.
16 Minuten
16. Jun 2025
Mythos Motivation - Teamentwicklung
Entwickler bringen Arbeitsfreude und Engagement meist schon von Haus aus mit. Diesen inneren Antrieb zu erhalten sollte für Führungskräfte im Fokus stehen.
13 Minuten
19. Jan 2017
Evolutionäres Prototyping von Business-Apps - Low Code/No Code und KI mit Power Apps
Microsoft baut Power Apps zunehmend mit Features aus, um die Low-Code-/No-Code-Welt mit der KI und der professionellen Programmierung zu verbinden.
19 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige