From 311b3e76f01438a87da5c36f5c60d06fdc388d81 Mon Sep 17 00:00:00 2001 From: MaddoScientisto Date: Thu, 26 Feb 2026 18:43:07 +0100 Subject: [PATCH] Add Avalonia UI frontend alongside WinForms and WPF Introduce Avalonia as a new cross-platform UI option, including new XAML and code-behind files for the application and main window. Update Program.cs to support a --avalonia launch argument and add corresponding launch profile. Integrate Avalonia NuGet packages and ensure DataModel supports UI-thread invocation for all frontends. All business logic and state are shared via DI, enabling consistent behavior across WinForms, WPF, and Avalonia. --- imagecatalog/AvaloniaApp.axaml | 8 + imagecatalog/AvaloniaApp.axaml.cs | 20 ++ imagecatalog/AvaloniaMainWindow.axaml | 317 ++++++++++++++++++++ imagecatalog/AvaloniaMainWindow.axaml.cs | 151 ++++++++++ imagecatalog/DataModel.cs | 12 +- imagecatalog/ImageCatalog 2.csproj | 4 + imagecatalog/Program.cs | 23 +- imagecatalog/Properties/launchSettings.json | 9 +- 8 files changed, 535 insertions(+), 9 deletions(-) create mode 100644 imagecatalog/AvaloniaApp.axaml create mode 100644 imagecatalog/AvaloniaApp.axaml.cs create mode 100644 imagecatalog/AvaloniaMainWindow.axaml create mode 100644 imagecatalog/AvaloniaMainWindow.axaml.cs diff --git a/imagecatalog/AvaloniaApp.axaml b/imagecatalog/AvaloniaApp.axaml new file mode 100644 index 0000000..8ce9be1 --- /dev/null +++ b/imagecatalog/AvaloniaApp.axaml @@ -0,0 +1,8 @@ + + + + + + diff --git a/imagecatalog/AvaloniaApp.axaml.cs b/imagecatalog/AvaloniaApp.axaml.cs new file mode 100644 index 0000000..9a14f4d --- /dev/null +++ b/imagecatalog/AvaloniaApp.axaml.cs @@ -0,0 +1,20 @@ +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; +using Microsoft.Extensions.DependencyInjection; + +namespace ImageCatalog_2; + +public partial class AvaloniaApp : Avalonia.Application +{ + public override void Initialize() => AvaloniaXamlLoader.Load(this); + + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + var model = Program.ServiceProvider.GetRequiredService(); + desktop.MainWindow = new AvaloniaMainWindow(model); + } + base.OnFrameworkInitializationCompleted(); + } +} diff --git a/imagecatalog/AvaloniaMainWindow.axaml b/imagecatalog/AvaloniaMainWindow.axaml new file mode 100644 index 0000000..a16b949 --- /dev/null +++ b/imagecatalog/AvaloniaMainWindow.axaml @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + +