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, VirtualizingStack
Panel, 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
Komponentenma
rkt 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