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. NativeAOT-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, DropDownButton, Carousel/FlipView, PathIcon, Flyout, RelativePanel, SplitView, ToggleSwitch und ToggleSplitButton. Das Avalonia-Entwicklungsteam hat angekündigt https://github.com/AvaloniaUI/Avalonia/discussions/16997, an weiteren Steuerelementen wie RichTextBox, 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 <StackPanel Orientation="horizontal"> und <StackPanel 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.