From 161a798d1fccfe5c88bd801ee051126356737253 Mon Sep 17 00:00:00 2001 From: Easley Date: Mon, 31 Aug 2026 22:00:45 +0200 Subject: [PATCH 01/14] feat: add floating region views --- samples/Sample.Avalonia/App.axaml.cs | 3 +- .../Sample.Avalonia/Sample.Avalonia.csproj | 1 + .../Sample.Avalonia/Views/TabRegionView.axaml | 10 + .../Views/TabRegionView.axaml.cs | 35 ++- samples/Sample.Wpf/App.xaml.cs | 1 + samples/Sample.Wpf/Sample.Wpf.csproj | 1 + samples/Sample.Wpf/Views/TabRegionView.xaml | 10 + .../Sample.Wpf/Views/TabRegionView.xaml.cs | 31 ++- .../AsyncNavigation.Avalonia.Floating.csproj | 12 + .../AvaloniaFloatingWindowHost.cs | 90 +++++++ .../DependencyInjectionExtensions.cs | 15 ++ src/AsyncNavigation.Avalonia/ContentRegion.cs | 28 ++- src/AsyncNavigation.Avalonia/TabRegion.cs | 39 ++- .../AsyncNavigation.Floating.csproj | 11 + .../FloatingServiceCollectionExtensions.cs | 16 ++ .../FloatingWindowOptions.cs | 17 ++ .../IFloatingViewSession.cs | 11 + .../IFloatingWindowHost.cs | 15 ++ .../IViewPlacementService.cs | 10 + .../ViewPlacementService.cs | 225 ++++++++++++++++++ .../ViewPlacementState.cs | 8 + .../AsyncNavigation.Wpf.Floating.csproj | 13 + .../DependencyInjectionExtensions.cs | 15 ++ .../WpfFloatingWindowHost.cs | 88 +++++++ src/AsyncNavigation.Wpf/ContentRegion.cs | 28 ++- src/AsyncNavigation.Wpf/TabRegion.cs | 39 ++- src/AsyncNavigation.slnx | 3 + .../IRegionPlacementParticipant.cs | 18 ++ src/AsyncNavigation/RegionPlacementItem.cs | 21 ++ .../AsyncNavigation.Tests.csproj | 1 + .../ViewPlacementServiceTests.cs | 172 +++++++++++++ 31 files changed, 979 insertions(+), 8 deletions(-) create mode 100644 src/AsyncNavigation.Avalonia.Floating/AsyncNavigation.Avalonia.Floating.csproj create mode 100644 src/AsyncNavigation.Avalonia.Floating/AvaloniaFloatingWindowHost.cs create mode 100644 src/AsyncNavigation.Avalonia.Floating/DependencyInjectionExtensions.cs create mode 100644 src/AsyncNavigation.Floating/AsyncNavigation.Floating.csproj create mode 100644 src/AsyncNavigation.Floating/FloatingServiceCollectionExtensions.cs create mode 100644 src/AsyncNavigation.Floating/FloatingWindowOptions.cs create mode 100644 src/AsyncNavigation.Floating/IFloatingViewSession.cs create mode 100644 src/AsyncNavigation.Floating/IFloatingWindowHost.cs create mode 100644 src/AsyncNavigation.Floating/IViewPlacementService.cs create mode 100644 src/AsyncNavigation.Floating/ViewPlacementService.cs create mode 100644 src/AsyncNavigation.Floating/ViewPlacementState.cs create mode 100644 src/AsyncNavigation.Wpf.Floating/AsyncNavigation.Wpf.Floating.csproj create mode 100644 src/AsyncNavigation.Wpf.Floating/DependencyInjectionExtensions.cs create mode 100644 src/AsyncNavigation.Wpf.Floating/WpfFloatingWindowHost.cs create mode 100644 src/AsyncNavigation/Abstractions/IRegionPlacementParticipant.cs create mode 100644 src/AsyncNavigation/RegionPlacementItem.cs create mode 100644 tests/AsyncNavigation.Tests/ViewPlacementServiceTests.cs diff --git a/samples/Sample.Avalonia/App.axaml.cs b/samples/Sample.Avalonia/App.axaml.cs index da64262..9e030f9 100644 --- a/samples/Sample.Avalonia/App.axaml.cs +++ b/samples/Sample.Avalonia/App.axaml.cs @@ -30,6 +30,7 @@ public override void OnFrameworkInitializationCompleted() var services = new ServiceCollection(); services.AddNavigationSupport(navigationOptions) + .AddFloatingSupport() .AddSingletonWithAllMembers() .RegisterView(nameof(LightView)) .RegisterView(nameof(ItemsRegionView)) @@ -89,4 +90,4 @@ public override void OnFrameworkInitializationCompleted() } #endregion } -} \ No newline at end of file +} diff --git a/samples/Sample.Avalonia/Sample.Avalonia.csproj b/samples/Sample.Avalonia/Sample.Avalonia.csproj index 91ca3b0..3c65a09 100644 --- a/samples/Sample.Avalonia/Sample.Avalonia.csproj +++ b/samples/Sample.Avalonia/Sample.Avalonia.csproj @@ -30,6 +30,7 @@ + diff --git a/samples/Sample.Avalonia/Views/TabRegionView.axaml b/samples/Sample.Avalonia/Views/TabRegionView.axaml index 221630d..a8b5852 100644 --- a/samples/Sample.Avalonia/Views/TabRegionView.axaml +++ b/samples/Sample.Avalonia/Views/TabRegionView.axaml @@ -45,6 +45,16 @@ Classes="NavigationAndForget" Content="ToLightView:Forget;New" Tag="LightView:New" /> + +