Microsoft Build 2020: Aus Xamarin.Forms wird MAUI

Seite 2: GUI rein per Programmcode

Inhaltsverzeichnis

Neben der reinen XAML-Syntax will Microsoft in MAUI auch das Einweben von C# in XAML anbieten. Dieses Konzept ist mit C# und HTML und dem Namen "Razor" aus ASP.NET/ASP.NET Core bekannt. Das experimentelle Microsoft-Projekt "Blazor Mobile Bindings" zeigt Razor mit XAML schon heute auf.

Als dritte Option sollen Softwareentwickler in MAUI die Benutzeroberfläche alternativ auch komplett mit Programmcode in einer Fluent-API-Syntax beschreiben können. Microsoft nennt diesen Ansatz "Code First Development" und folgt damit dem MVU-Muster (Model-View-Update) der funktionalen Programmiersprache Elm. Neben MVU ist aber weiterhin das bisher präferierten Pattern Model-View-ViewModel (MVVM) im Angebot.

Code First Development mit C# in MAUI

(Bild: Microsoft )


Als Namensraum für MAUI kommt nicht mehr Xamarin.Forms, sondern System.MAUI zum Einsatz. Auch die Ansteuerung von Betriebssystem- und Hardwareressourcen, die bisher als NuGet-Paket System.Essentials existiert, soll dann als System.Devices Teil von MAUI werden. MAUI gehört damit zur .NET-Klassenbibliothek.

Der Name Xamarin entfällt auch aus den Bibliotheken für native Xamarin-Apps mit plattformspezifischen Oberflächenbeschreibungen (Xamarin.iOS, Xamarin.Android, Xamarin.Mac und Xamarin.Windows). Im Marketing will Microsoft zukünftig nicht mehr von "Xamarin", sondern von ".NET for iOS" und ".NET for Android" sowie ".NET for Mac" sprechen. Nicht davon betroffen sind die Namensräume dieser Bibliotheken, da diese nicht in Xamarin enthalten, sondern mit Android, UIKit beziehungsweise Windows beginnen. Die Nachfolger der nativen Xamarin-Apps werden weiterhin auf der Mono-Runtime aufsetzen, jedoch die gleiche Klassenbibliothek wie .NET 6.0 verwenden.

MAUI und seine Gefährten sollen zudem die einheitliche .NET-Klassenbibliothek nutzen sowie das neue .NET Software Development Kit, das Microsoft in .NET Core eingeführt hat und auch Basis für alle Projekte im zukünftigen .NET 5.0 und Nachfolgern sein wird. So startet man neue MAUI-Projekte an der Konsole unter Verwendung des .NET Command Line Interface (CLI) mit dotnet new maui.

MAUI mit der .NET CLI

(Bild: Microsoft )

Anders als bei den bisherigen Projektvorlagen entsteht nicht ein Projekt für Xamarin.Forms und ein Kopf-Projekt für jede einzelne Zielplattform, sondern insgesamt nur eines im vereinfachten .NET-SDK-Stil. Sofern plattformspezifische Unterschiede notwendig sind, kann man spezifische Ressourcen im Unterordner "Platforms" verwalten. Durch das Multi-Targeting-Feature entstehen dann beim Kompilieren verschiedene Installationspakete für die Zielplattformen.

Auch die nativen Xamarin-Varianten werden das neue SDK-Projektsystem nutzen. Somit können Entwickler Projekte mit Befehlen wie dotnet new ios und dotnet new android beginnen. Für die Unterstützung der Umstellung bestehender Projekte will Microsoft das Werkzeug try-convert aufpolieren.

Microsoft will Xamarin.Forms auch bis zum Erscheinen von MAUI hinsichtlich der grafischen Möglichkeiten ausbauen und um Fähigkeiten erweitern, die es bisher schon in WPF gibt. Dazu gehört das Zeichnen von Element (Shapes und Paths, wofür bisher SkiaSharp eingesetzt werden musste), Farbverläufe (Gradient Brush). Auch neue Steuerelemente für Anwendungscontainer (Shell), Navigationsleiste (AppBar) und Registerkarten mit flexibler Darstellung von Text und/oder Symbolen (TabView). Ein Teil der Funktionen soll schon in Xamarin Forms 5.x ab Herbst 2020 erscheinen.

Eine komplette Angleichung an WPF ist hingegen nicht mehr geplant. Auf der Build 2017 kündigte Microsoft mit "XAML Standard" eine Vereinheitlichung der XAML-Syntax zwischen WPF, UWP und Xamarin Forms an. Im November 2017 erschien das Paket "Xamarin.Forms.Alias", das als ersten Schritt der Vereinheitlichung die Verwendung von WPF-Steuerelementnamen in Xamarin Forms ermöglichte. Leider ist das GitHub-Projekt von XAML Standard seit November 2017 nicht mehr angerührt worden und das Paket "Xamarin.Forms.Alias" wieder vom Microsoft-Server verschwunden.