Avalonia
Eintrag zuletzt aktualisiert am: 19.02.2025
Avalonia
https://avaloniaui.net/platforms ist ein
Cross-Platform-
GUI-Framework für .NET, das sowohl primär WPF, aber auch der
Universal Windows Platform (UWP) mit
Windows UI Library (
WinUI) nachempfunden ist. Daher auch der Name Avalonia: eine Reminiszenz an den Codenamen "Avalon", den WPF einst hatte. In Avalonia schreiben Entwicklerinnen und Entwickler die Benutzeroberfläche also in
eXtensible Application Markup Language (
XAML) plus C#, F# oder
Visual Basic .NET oder rein in diesen
Programmiersprachen ohne Tags.
Das
Open Source-Projekt mit
MIT-Lizenz wurde unter dem Namen "Perspex" von Steven Kirk
https://github.com/grokys im Dezember 2013 auf GitHub begonnen
https://github.com/AvaloniaUI/Avalonia und am 11. Mai 2015 in Avalonia umbenannt. Zwischen dem 1. April 2020 und dem 20. Februar 2024 gehört das Projekt zur
.NET Foundation. Den erfolgten Austritt begründen das Entwicklungsteam unter
https://github.com/AvaloniaUI/Avalonia/discussions/14666.
Nunmehr bildet die estnische Firma AvaloniaUI OÜ mit Sitz in Tallinn das Dach des Projekts. Die Website ist daher
https://avaloniaui.net. AvaloniaUI lebt von Softwareentwicklungsaufträgen mit Avalonia sowie Support und Training für Avalonia sowie dem kommerziellen
Avalonia XPF. Das Projekt Avalonia trug bis Mai 2023 eine 0 in der Hauptversionsnummer, machte dann zum zehnjährigen Jubiläum einen Sprung von 0.10.22 auf 11.0.0
https://avaloniaui.net/blog/10-years-of-avalonia?utm_source=chatgpt.com .
Anders als WPF und
WinUI, die nur auf Windows funktionieren, laufen Avalonia-Oberflächen auf Windows (ab Version 8.1), macOS (ab Version 10.14),
Linux Debian (ab Version 9), Ubuntu (ab Version 16.04) und Fedora (ab Version 30) sowie Embedded
Linux (z.B. auf Raspberry Pi) und IoT-Geräte via Meadow (
https://www.wildernesslabs.co). Andere
Linux-Distributionen sind nicht offiziell getestet, Avalonia könnte aber überall dort funktionieren, wo das moderne
.NET SDK von Microsoft läuft. Außerdem läuft Avalonia auf
iOS ab Version 13,
Android ab Version 5.0 sowie im
Webbrowser mit Hilfe von WebAssembly (das Avalonia-Team empfiehlt Chrome oder Safari: "For the best performance and support we recommend latest Chrome or Safari versions.". Warum Firefox nicht empfohlen wird, bleibt offen). Im Browser erfolgt die Darstellung mit
HTML und
CSS; um die Umsetzung von
XAML kümmert sich Avalonia. Genau wie bei
Blazor WebAssembly bringt Avalonia auch
JavaScript-Code mit, um die Brücke zwischen WebAssembly und dem Document Object Model (DOM) zu bilden.
Im Browser live ausprobieren kann man auf Avalonia auf dem Online-Playground:
https://play.avaloniaui.net (der läuft auch gut im Firefox). Aus der erweiterten Community heraus gibt es auch noch Avalonia für
Tizen und
tvOS. AvaloniaUI will zukünftig auch
Apples neues Betriebssystem visionOS unterstützen. Von Windows kann man für alle Plattformen außer für
iOS kompilieren – wahlweise mit
Multi-Targeting-Projekten oder mehreren Kopfprojekten (die Projektvorlage verwendet vier Kopfprojekte: Desktop,
Android,
iOS und Browser). Für das Kompilieren für
iOS braucht man auch bei Avalonia einen macOS-Rechner.
Das Rendering bei Avalonia basiert nicht auf
DirectX, sondern der Skia Graphics Library von
Google https://skia.org, welche
Google selbst in Chrome, ChromeOS,
Android und
Flutter verwendet. Auf dem Windows-Betriebssystem kann man bei Avalonia alternativ auch mit Microsofts Direct2D rendern.
Avalonia verwendet die von Microsoft bereitgestellten .NET-Laufzeitumgebungen für alle Plattformen. Avalonia basiert auf der
.NET Core CLR Runtime auf Windows, macOS und
Linux, während für
iOS,
Android und WebAssembly die
Mono Runtime zum Einsatz kommt. Dieses Muster kennt man bereits von den Microsoft-Frameworks selbst. Avalonia basiert aber nicht auf .NET
MAUI. Native
AOT-Kompilierung ist in Avalonia möglich, allerdings nur für Windows, macOS und
Linux.
AOT für
Android ist geplant unter dem Namen "FastDroid"
https://github.com/AvaloniaUI/Avalonia/discussions/16997.
Kompatibilität zu und einfache Migrierbarkeit von WPF war nicht das Ziel bei Avalonia; vielmehr fanden die Schöpfer die Grundidee von
XAML gut, wollten aber neben der Plattformunabhängigkeit auch Einiges bei der Syntax besser machen und nahmen dabei auch Anleihen UWP/
WinUI. Die Zielsetzung ist anders beim kommerziellen Schwesterprojekt
Avalonia XPF, das eine sehr einfache Migration von WPF erlaubt, dazu unten mehr.
Avalonia unterscheidet sich von WPF insbesondere in den Bereichen Styling und Data Templates sowie einigen
Steuerelementen. Es fehlen in Avalonia z.B. die WPF-
Steuerelemente PrintDialog, DocumentViewer, GroupBox,
ListView und StatusBar. Lästig ist, dass es in Avalonia nicht einmal eine einfache MessageBox im Kern gibt
https://docs.avaloniaui.net/docs/basics/user-interface/messagebox und man schon dafür eine Community-Lösung braucht
https://github.com/AvaloniaCommunity/MessageBox.Avalonia.
Manche
Steuerelemente in Avalonia haben ein Pendant in UWP/
WinUI, aber nicht in WPF, z.B. AutoCompleteBox/AutoSuggestBox, ColorPicker, ContentPresenter, DatePicker, DropDown
Button, Carousel/FlipView, PathIcon, Flyout, Relative
Panel, SplitView, ToggleSwitch und ToggleSplit
Button. Das Avalonia-Entwicklungsteam hat angekündigt
https://github.com/AvaloniaUI/Avalonia/discussions/16997, an weiteren
Steuerelementen wie Rich
TextBox,
Markdown und TreeDataGrid sowie dem Drucken mit Avalonia zu arbeiten, zum Teil diese
Steuerelemente aber nur gegen Bezahlung bereitzustellen.
Ein manchen Stellen ist die Avalonia-
XAML-Syntax einfacher als WPF. So kann man Reihen und Spalten für ein Grid-Layout alternativ in einem einzigen Tag definieren
<Grid ColumnDefinitions="Auto,*,32" RowDefinitions="*,Auto">
anstelle der in ausschweifenden Tag-Folge in WPF mit <ColumnDefinition> und <RowDefinition>. In
XAML gibt es eine Markup Extension für OnPlatform für das plattformspezifische Setzen von Eigenschaften. An einigen Stellen ist Avalonia strenger als WPF: Bei WPF funktioniert <Stack
Panel Orientation="horizontal"> und <Stack
Panel Orientation="Horizontal">. Avalonia fordert die Großschreibung. Manchmal sind Namen einfach anders, z.B. PointerPressed statt MouseDown. Bei Gradienten muss man in Avalonia Prozentzahlen verwenden
<LinearGradientBrush EndPoint="50%,100%" StartPoint="50%,0%">
Anstelle der Werte zwischen 0 und 1 bei WPF:
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
XAML-Dateien haben die Dateinamenserweiterung .axaml statt .xaml wie in WPF.
Compiled Bindings sind möglich wie in .NET
MAUI mit x:DataType. In Data Templates können dabei Typumwandlungen notwendig werden, die die Syntax sperrig machen:
<
Button Content="Done" Name="C_Done"
Command="{Binding ((vm:MainViewModel)DataContext).SetDoneCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
CommandParameter="{Binding TaskID}" />
Eine
Liste der abweichenden
XAML-Features und
XAML-
Steuerelemente findet man unter
https://docs.avaloniaui.net/docs/get-started/wpf/comparison-of-avalonia-with-wpf-and-uwp.
Einziger kommerzieller
Komponentenhersteller, der bisher eine
Steuerelementsammlung für Avalonia liefert, ist die Firma Actipro Software:
https://www.actiprosoftware.com/products/controls/avalonia. Diese ist aber im Vergleich zu anderen
Steuerelementsammlung nicht sehr umfangreich.
Für Avalonia gibt es bisher weder einen WYSWYG-Designer noch Hot Reloading. Es gibt aber in Visual Studio eine Vorschauansicht auf die per
XAML-Tags erfasste Oberfläche, die sich bei jedem Tastaturanschlag im
XAML-Editor automatisch aktualisiert. Der Previewer führt auch den Konstruktor des gebundenes View Models aus und zeigt dort befüllte Daten an.
Leider sind die Projektvorlagen für Visual Studio immer auf dem aktuellen Stand, was zu einigen Problemen beim Übersetzen führt, vgl. "Don't use the Visual Studio templates, they're totally broken and haven't been updated in a while. Create your projects using the dotnet command."
https://github.com/AvaloniaUI/Avalonia/discussions/16467. Die hier erwähnten Projektvorlagen für das Kommandozeilenwerkzeug findet man hier:
https://www.nuget.org/packages/Avalonia.Templates. Die fehlende Aktualität der Visual Studio-Integration ist abschreckend für Einsteiger.
Laut einer Ankündigung vom 12.09.2024
https://github.com/AvaloniaUI/Avalonia/discussions/16997 soll eine erste Vorschauversion auf einem WYSWYG-Designer in der ersten Jahreshälfte 2025 erscheinen, zunächst als eigenständige Anwendung mit eigenem Codeeditor, später auch als Visual Studio-Add-in. Auch Hot Reloading steht auf der Agenda mit Namen "Avalonia Accelerate". Zumindest der Designer wird laut Ankündigung aber Geld kosten. Für das Hot Reloading gibt es aktuell ein experimentelles Community-Projekt, das aber seit 2 Jahren nicht mehr weiterentwickelt wurde:
https://github.com/AvaloniaUI/Live.Avalonia
Avalonia wird verbreitet in Form von NuGet-Paketen
https://www.nuget.org/packages/Avalonia. Avalonia-Projektvorlagen und den Previewer zur Entwicklungszeit gibt es für
Die Projektvorlage für Visual Studio bietet einen Assistenten zum Anlegen von Projekten. Dort kann man neben den gewünschten Zielplattformen auch zwischen zwei
MVVM-Frameworks wählen: ReactiveUI
https://www.reactiveui.net oder das
MVVM aus dem
.NET Community Toolkit (CommunityToolkit.Mvvm) von Microsoft
https://github.com/CommunityToolkit/dotnet.
Avalonia erlaubt "Headless Testing", also das Testen ohne sichtbares Fenster via NuGet-Paketen Avalonia.Headless, Avalonia.Headless.Xunit und Avalonia.Headless.Nunit:
https://docs.avaloniaui.net/docs/concepts/headless/. WPF kann das nicht.
Lange Zeit gab es unter den Kunden von www.IT-Visions.de nicht einen einzigen, der Avalonia eingesetzt hat. Seit Mitte 2024 gibt es jedoch einige Schulungs- und Beratungsaufträge dazu.