Sie sind hier: Lexikon/Glossar

Was ist Avalonia ?

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.

Beratung & Support

Schulungen zu diesem Thema

 Anfrage für eine individuelle Schulung zum Thema Avalonia  Gesamter Schulungsthemenkatalog

Bücher zu diesem Thema

  Blazor 9.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 9.0, C# 13.0 und Visual Studio 2022
  C# 13.0 Crashkurs
  Cross-Plattform-Apps mit .NET MAUI entwickeln
  Moderne Datenzugriffslösungen mit Entity Framework Core 9.0
  .NET 9.0 Update: Die Neuerungen in .NET 9.0 gegenüber .NET 8.0
  PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
  .NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
  .NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
  Concurrency with Modern C++: What every professional C++ programmer should know about concurrency
  C++20: Get the Details
  Blazor 8.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 8.0, C# 12.0 und Visual Studio 2022
  Moderne Datenzugriffslösungen mit Entity Framework Core 8.0
  C# 12.0 Crashkurs
  App-Entwicklung für Mobile und Desktop: Software Engineering mit .NET MAUI und Comet für iOS, Android, Windows und macOS
  Cross-Plattform-Apps mit .NET MAUI entwickeln
  Blazor 7.0: Blazor WebAssembly, Blazor Server und Blazor Hybrid
  C# 11.0 Crashkurs
  Moderne Datenzugriffslösungen mit Entity Framework Core 7.0
  PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
  C++ Core Guidelines Explained: Best Practices for Modern C++
  App Engineering: SwiftUI, Jetpack Compose, .NET MAUI und Flutter
  Vue.js 3 Crashkurs
  Moderne Datenzugriffslösungen mit Entity Framework Core 6.0
  Blazor 6.0: Blazor WebAssembly, Blazor Server und Blazor Desktop
  C# 10.0 Crashkurs
  Cross-Plattform-Apps mit Xamarin.Forms entwickeln
  Developing Web Components with TypeScript: Native Web Development Using Thin Libraries
  PowerShell – kurz & gut
  C# 9.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET 5.0, .NET Core und Xamarin
  ASP.NET Core Blazor 5.0: Blazor WebAssembly und Blazor Server - Moderne Single-Page-Web-Applications
  Windows PowerShell 5 und PowerShell 7: Das Praxisbuch
  Moderne Datenzugriffslösungen mit Entity Framework Core 5.0
  ASP.NET Core Blazor 3.1/3.2: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
  ASP.NET Core Blazor 3.0/3.1: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
  Moderne Datenzugriffslösungen mit Entity Framework Core 3.1
  C# 8.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  Moderne Datenzugriffslösungen mit Entity Framework Core 3.0
  Windows PowerShell 5.1 und PowerShell Core 6.1 - Das Praxishandbuch
  Moderne Datenzugriffslösungen mit Entity Framework Core 2.1/2.2
  Moderne Webanwendungen für .NET-Entwickler: Server-Anwendungen, Web APIs, SPAs & HTML-Cross-Platform-Anwendungen mit ASP.NET, ASP.NET Core, JavaScript
  C# 7.3 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  Modern Data Access with Entity Framework Core: Database Programming Using .NET, .NET Core, UWP, and Xamarin with C#
  Modernes C++: Concurrency meistern
  Windows PowerShell und PowerShell Core - Der schnelle Einstieg: Skriptbasierte Systemadministration für Windows, Linux und macOS
  Programmierung in Python
  C# 7.2 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  Moderne Datenzugriffslösungen mit Entity Framework Core 2.0/2.1
  Effizienter Datenzugriff mit Entity Framework Core: Datenbankprogrammierung mit C# für .NET Framework, .NET Core und Xamarin
  Moderne Datenzugriffslösungen mit Entity Framework Core 2.0
  Windows PowerShell 5 und PowerShell Core 6 - Das Praxishandbuch
  Angular - Das Praxisbuch zu Grundlagen und Best Practices
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.0, 1,1 und 2.0
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.0, 1,1 und 2.0
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.1 und 2.0-Preview2
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.x und 2.0
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.x und 2.0
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.1
  Introducing Regular Expressions: JavaScript and TypeScript
  Introducing Web Development
  Introducing Bootstrap 4
  Programming Web Applications with Node, Express and Pug
  Einführung in TypeScript: Grundlagen der Sprache TypeScript 2
  Pug – Die Template-Engine für node.js
  Web-Programmierung mit Node, Express und Pug
  Windows PowerShell 5 – kurz & gut
  Moderne Datenzugriffslösungen mit Entity Framework Core 1.1
  Windows PowerShell 5.0 - Das Praxishandbuch
  PHP 7 und MySQL: Von den Grundlagen bis zur professionellen Programmierung
  Windows Scripting Lernen
  .NET Praxis - Tipps und Tricks für .NET und Visual Studio
  Grundlagen für Web-Entwickler: Protokolle, HTML und CSS
  Bootstrap 3 - Stile und Komponenten
  Bootstrap 4 - Stile und Komponenten
  Einführung in JavaScript: ECMAScript 5
  Einführung in node.js
  express – Middleware für node.js
  JADE – Die Template Engine für node.js
  Reguläre Ausdrücke in JavaScript
  Moderne Datenzugriffslösungen mit Entity Framework 6
  C++ Standardbibliothek
  AngularJS: Moderne Webanwendungen und Single Page Applications mit JavaScript
  Microsoft SharePoint Server 2013 und SharePoint Foundation: Das umfassende Handbuch
  SQL Server 2014 für Professionals: Hochverfügbarkeit, Cloud-Szenarien, Backup/Restore, Monitoring & Performance
  Moderne Webanwendungen mit ASP.NET MVC und JavaScript
  Windows PowerShell 4.0 - Das Praxishandbuch
  JavaScript: Das umfassende Handbuch, inkl. HTML5, JavaScript-Frameworks, jQuery, OOP
  C++11 für Programmierer
  C++ kurz und gut
  Microsoft ASP.NET 4.5 - Entwicklerbuch
  Moderne Webanwendungen mit ASP.NET MVC
  Verteilte Systeme und Services mit .NET 4.5
  Scripting mit Windows PowerShell 3.0 - Der Workshop: Skript-Programmierung mit Windows PowerShell 3.0 vom Einsteiger bis zum Profi
  Windows 8 für Administratoren
  Windows 8.1 - Das Handbuch (27. November 2013)
  Windows Store Apps entwickeln mit C# und XAML - Crashkurs
  .NET 4.5 Update
  Windows Scripting Lernen
  WPF 4.5 und XAML
  Datenbankprogrammierung mit .NET 4.5
  C++11: Der Leitfaden für Programmierer zum neuen Standard
  Verteilte Systeme und Services mit .NET 4.0
  Microsoft ASP.NET 4.0 mit C# 2010 - Entwicklerbuch
  Agile Software Engineering with Visual Studio
  Datenbankprogrammierung mit .NET 4.0. Mit Visual Studio 2010 und SQL Server 2008 R2
  Microsoft SharePoint Server 2010 und SharePoint Foundation 2010
  Microsoft SQL Server 2008 R2 - Das Entwicklerbuch
  Microsoft Viusal C# 2010
  Office 2010 Programmierung mit VSTO und .NET 4.0: Word, Excel und Outlook erweitern und anpassen
  Programmieren mit dem ADO.NET Entity Framework
  .NET 4.0 Crashkurs
  Visual Basic 2010: Grundlagen, ADO.NET, Windows Presentation Foundation
  .NET 4.0 Update
  Windows PowerShell 2.0 - Das Praxishandbuch
  Windows 7 im Unternehmen
  Agile Muster und Methoden
  Ajax
  ASP.NET 4.0
  ASP.NET 4.0 mit Visual C# 2010
  JavaScript
  PHP 5-Migration
  Scripting mit Windows PowerShell 2.0 - Der Einsteiger-Workshop
  SQL Server 2008 R2: Das Programmierhandbuch. Inkl. ADO.NET 3.5, LINQ to Entities und LINQ to SQL
  Visual Basic 2010
  Windows PowerShell 2.0 - Crashkurs
  Windows Server 2008 R2
  Windows Scripting
  Windows Scripting Lernen
  Data Mining mit Microsoft SQL Server
  Windows 7 für Administratoren
  Microsoft ASP.NET 3.5 mit Visual Basic 2008 - Entwicklerbuch
  .NET 3.5
  Essential PowerShell
  .NET 3.5 Crashkurs
  Webanwendungen mit ASP.NET 3.5 und AJAX Crashkurs
 Alle unsere aktuellen Fachbücher  E-Book-Abo für ab 99 Euro im Jahr