Uno Platform

Eintrag zuletzt aktualisiert am: 19.02.2025

Uno Platform ist ein Framework zur Entwicklung von Cross-Platform-Lösungen auf Basis .NET, C# und XAML.
Open Source, kostenfrei; Beratung, Support und Training kosten aber.

Die Oberflächenbeschreibung erfolgt mit der XML-basierten "eXtensible Application Markup Language" (XAML)
Der eingesetzte XAML-Dialekt ist UWP-XAML (WinUI 2) oder WinUI3.

Plattformen

Aussagen von Uno über Uno

  • "Universal Windows Platform Bridge"
  • "pixel-perfect UI and UX"
  • "It provides the full API definitions of the UWP Windows 10 2004 (19041), and the implementation of parts of the UWP API, such as Windows.UI.Xaml, to enable UWP applications to run on these platforms. "
  • "Uno is not meant to be a complete replacement of all the native UI frameworks."

Details zur Uno Platform

Die Uno Platform ist ein weiteres Cross-Platform-GUI-Framework für .NET und der direkte Mitbewerber von Avalonia. Die Uno Platform gibt es seit dem Jahr 2018 als ein Open Source-Projekt der gleichnamigen kanadischen Firma mit Sitz in Montréal mit 30 Mitarbeitern https://platform.uno/about-us.

Uno-Anwendungen laufen auf Windows (ab Windows 7), Linux Desktop (alle Linux-Distributionen, auf denen .NET 7.0 oder höher läuft), macOS (Desktop und Catalyst, ab Version 10.15), iOS (ab Version 11), Android (ab Version 5) und im Browser (in allen WebAssembly-fähigen Browsern) sowie Tizen. Tizen erscheint jedoch weder in der Plattform-Liste auf https://github.com/unoplatform/uno noch https://platform.uno/docs/articles/getting-started/requirements.html, obwohl es ein aktuelles NuGet-Paket dazu vom Uno-Team gibt: https://www.nuget.org/packages/Uno.WinUI.Runtime.Skia.Tizen

Uno basiert wie die Windows Presentation Foundation (WPF), die Windows UI Library (WinUI), WinUI3, .NET Multi-Platform App UI (MAUI) und Avalonia/Avalonia XPF auf der eXtensible Application Markup Language (XAML). Die Syntax orientiert sich aber nicht an WPF, sondern streng an WinUI. Entwicklerinnen und Entwickler haben bei Uno die Wahl, dabei zwischen der Kompatibilität zu UWP mit WinUI2 im Namensraum Windows.UI.Xaml oder WinUI3 im Namensraum Microsoft.UI.Xaml zu sein. Daher gibt es zwei Uno-Pakete: Uno.UI für UWP-XAML https://www.nuget.org/packages/Uno.UI und Uno.WinUI für WinUI3-XAML https://www.nuget.org/packages/Uno.WinUI. Da das Uno-Entwicklungsteam Uno.WinUI automatisiert aus Uno.UI erzeugt, sind die Funktionen beider Pakete nahezu identisch.

In beiden Fällen ist Uno aber nicht zu 100% identisch zu Microsofts Oberflächen. Es fehlen in Uno zum Beispiel die Steuerelemente ListBox, MapControl, Hub, SemanticZoom, RichTextBlock, VirtualizingStackPanel, ParallaxView und AnnotatedScrollBar. Eine vollständige Abweichungsliste findet man unter https://platform.uno/docs/articles/implemented-views.html. Auch bei der XAML-Syntax gibt es marginale Unterschiede https://platform.uno/docs/articles/api-differences.html. So ist DependencyObject in Uno eine Schnittstelle statt einer Klasse wie bei Microsoft. Auf Android, iOS und macOS weicht die Vererbungsfolge für die Basisklasse UIElement ab von der Implementierung von Microsoft.

Das Rendering in Uno basiert wie bei Avalonia auf der Skia Graphics Library von Google https://skia.org via SkiaSharp aus dem Mono-Projekt https://github.com/mono/SkiaSharp. Auf Windows steht alternativ auch das Windows App SDK zur Verfügung, dann läuft die Anwendung aber erst ab Windows 10 (Version 19041). Auf Windows verwendet Uno eine WPF-Anwendung als Shell. Das bedeutet, dass die in Uno mögliche Native AOT-Kompilierung nicht auf Windows funktioniert, da die verwendete WPF-Shell nicht kompatibel zu NativeAOT ist. Im Browser wird XAML nach HTML und CSS umgesetzt inklusive einer JavaScript-Bibliothek für die Brücke zwischen WebAssembly und DOM.

Die Migration von WinUI3 auf Uno ist in vielen Fällen einfach. Aufrufe von Windows-spezifischen APIs (z.B. Microsoft.UI.Win32Interop) müssen dann durch plattformspezifische Kompilierung behandelt werden (#if WINDOWS … #endif). Die Dokumentation von Uno bietet neben Hinweisen zum Umstieg von UWP/WinUI2 und WinUI3 auch Hilfen zur Migration von WPF https://platform.uno/docs/articles/wpf-migration.html, von Xamarin.Forms https://platform.uno/docs/articles/guides/xf-migration/overview.html und sogar Silverlight https://platform.uno/docs/articles/guides/silverlight-migration/silverlight-migration-landing.html zu Uno an.

WinUI3-Steuerelemente von Drittanbietern haben in der Regel Abhängigkeiten von Windows-Betriebssystem-APIs, die in einer Uno-Anwendung nur auf Windows funktionieren können. So gibt es in der Uno-Dokumentation zwar einen Beitrag "How to use Windows Community Toolkit", in der dann aber der enttäuschende Satz steht: "While all Windows Community Toolkit packages are supported for UWP and WinAppSDK, this is not the case for the other platforms Uno Platform supports.". Es gab zaghafte Ansätze von Komponentenanbieter, spezielle Steuerelemente für Uno zu erschaffen, z.B. bei Syncfusion https://www.syncfusion.com/forums/176644/syncfusion-uno-platform-support und Infragistics https://platform.uno/blog/infragistics-announces-uno-platform-specific-ui-controls/, die aber bisher nicht in stabile Produkte mündeten.

Da ein Komponentenmarkt für Uno also bisher nicht in Schwung kommt, bietet Uno als Rettungsanker an, in Uno auch .NET MAUI-Steuerelemente (auch von Drittanbietern) zu verwenden. Dazu gibt es das in der Projektassistenten auswählbare Feature ".NET MAUI Embedding". Die Anwendung läuft dann aber nur noch auf den Plattformen, wo .NET MAUI läuft: iOS, Android, MacOS und Windows. Linux und der Webbrowser sind dann raus.

Neben XAML bietet Uno zur Definition der Oberflächen auch eine Fluent-API-Syntax in C# an: https://platform.uno/docs/articles/external/uno.extensions/doc/Learn/Markup/Overview.html
Außerdem gibt es zehn Erweiterungen als NuGet-Pakete https://platform.uno/docs/articles/external/uno.extensions/doc/ExtensionsOverview.html zum Beispiel für Eingabevalidierung, Authentifizierung, Protokollierung, Navigation und Lokalisierung sowie das das stark vereinfachte Entwurfsmuster Model-View-Update-eXtended (MVUX) als Alternative zu Model-View-ViewModel (MVVM). Ebenso gibt es ein Paket für Oberflächentests https://github.com/unoplatform/Uno.UITest, das aber nur Uno auf WebAssembly funktioniert. Diese Erweiterungen sind bereits im Uno Platform Template Wizard wählbar. Der Uno-Projektanlageassistent ist dem von Avalonia optisch sehr ähnlich, besitzt aber deutlich mehr wählbare Optionen.

Uno-Erweiterungen gibt es für folgende Entwicklungsumgebungen:
In diesen Entwicklungsumgebungen stehen Projektvorlagen, XAML-Eingabeunterstützung und Hot Reloading zur Verfügung, wobei es in der Dokumentation umfangreiche Tabellen gibt https://platform.uno/docs/articles/studio/Hot%20Reload/hot-reload-overview.html, in welcher Konstellation aus Betriebssystem und Entwicklungsumgebung Hot Reloading verfügbar ist. Die aktuelle Projektvorlage arbeitet mit Multi-Targeting.

Einen XAML-Previewer im XAML-Editor wie bei Avalonia bietet Uno nicht. Der XAML-Live-Preview beim Debugging in Visual Studio funktioniert aber. Einen grafischen Designer unter dem Namen "Hot Design" hat Uno angekündigt; man kann sich derzeit auf eine Warteliste setzen: https://platform.uno/hot-design. Anders als andere WYSIWYG-Designer soll der kommende Designer auf der laufenden Anwendung arbeiten.

Auch die Uno Platform hat veralterte Inhalte auf der Website, zum Beispiel heißt es auf https://platform.uno/docs/articles/uwp-vs-winui3.html, dass