From ee3f99de3e75b78f9d6c82baf3c1e637ee0e317b Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Thu, 11 Dec 2025 13:22:03 +0000 Subject: [PATCH 1/4] add flex panel control --- .../FlexDemoNumberToThicknessConverter.cs | 24 + samples/ControlCatalog/MainView.xaml | 3 + samples/ControlCatalog/Pages/FlexPage.axaml | 219 +++++++ .../ControlCatalog/Pages/FlexPage.axaml.cs | 37 ++ .../ViewModels/FlexItemViewModel.cs | 118 ++++ .../ViewModels/FlexViewModel.cs | 126 ++++ .../Avalonia.Controls.csproj | 2 +- .../FlexPanel/AlignContent.cs | 46 ++ src/Avalonia.Controls/FlexPanel/AlignItems.cs | 38 ++ src/Avalonia.Controls/FlexPanel/Flex.cs | 271 ++++++++ src/Avalonia.Controls/FlexPanel/FlexBasis.cs | 89 +++ .../FlexPanel/FlexBasisKind.cs | 22 + .../FlexPanel/FlexDirection.cs | 31 + src/Avalonia.Controls/FlexPanel/FlexPanel.cs | 582 ++++++++++++++++++ src/Avalonia.Controls/FlexPanel/FlexWrap.cs | 26 + .../FlexPanel/JustifyContent.cs | 53 ++ src/Avalonia.Controls/FlexPanel/Uv.cs | 36 ++ 17 files changed, 1722 insertions(+), 1 deletion(-) create mode 100644 samples/ControlCatalog/Converter/FlexDemoNumberToThicknessConverter.cs create mode 100644 samples/ControlCatalog/Pages/FlexPage.axaml create mode 100644 samples/ControlCatalog/Pages/FlexPage.axaml.cs create mode 100644 samples/ControlCatalog/ViewModels/FlexItemViewModel.cs create mode 100644 samples/ControlCatalog/ViewModels/FlexViewModel.cs create mode 100644 src/Avalonia.Controls/FlexPanel/AlignContent.cs create mode 100644 src/Avalonia.Controls/FlexPanel/AlignItems.cs create mode 100644 src/Avalonia.Controls/FlexPanel/Flex.cs create mode 100644 src/Avalonia.Controls/FlexPanel/FlexBasis.cs create mode 100644 src/Avalonia.Controls/FlexPanel/FlexBasisKind.cs create mode 100644 src/Avalonia.Controls/FlexPanel/FlexDirection.cs create mode 100644 src/Avalonia.Controls/FlexPanel/FlexPanel.cs create mode 100644 src/Avalonia.Controls/FlexPanel/FlexWrap.cs create mode 100644 src/Avalonia.Controls/FlexPanel/JustifyContent.cs create mode 100644 src/Avalonia.Controls/FlexPanel/Uv.cs diff --git a/samples/ControlCatalog/Converter/FlexDemoNumberToThicknessConverter.cs b/samples/ControlCatalog/Converter/FlexDemoNumberToThicknessConverter.cs new file mode 100644 index 0000000000..c5c3e0e2ed --- /dev/null +++ b/samples/ControlCatalog/Converter/FlexDemoNumberToThicknessConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; + +namespace ControlCatalog.Converter +{ + internal sealed class FlexDemoNumberToThicknessConverter : IValueConverter + { + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is int x && targetType.IsAssignableFrom(typeof(Thickness))) + { + var y = 16 + 2 * ((x * 5) % 9); + return new Thickness(2 * y, y); + } + + throw new NotSupportedException(); + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => + throw new NotSupportedException(); + } +} diff --git a/samples/ControlCatalog/MainView.xaml b/samples/ControlCatalog/MainView.xaml index 984daf1200..0713080480 100644 --- a/samples/ControlCatalog/MainView.xaml +++ b/samples/ControlCatalog/MainView.xaml @@ -102,6 +102,9 @@ + + + diff --git a/samples/ControlCatalog/Pages/FlexPage.axaml b/samples/ControlCatalog/Pages/FlexPage.axaml new file mode 100644 index 0000000000..0da7a86c9e --- /dev/null +++ b/samples/ControlCatalog/Pages/FlexPage.axaml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +