From 99c1effd840ca8e0e45fd751fe29ff91ecf1221b Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 26 Jan 2025 14:16:12 +0800 Subject: [PATCH] chore: add avalonia Expander demo. --- .../UserControl/Styles/ExpanderDemo.axaml | 341 ++++++++++++++++++ .../UserControl/Styles/ExpanderDemo.axaml.cs | 10 + .../Themes/Basic/Converters.axaml | 1 + .../Themes/Styles/Expander.axaml | 266 ++++++++++++++ .../HandyControl_Avalonia/Themes/Theme.axaml | 1 + .../Converter/CornerRadiusSplitConverter.cs | 37 ++ .../Converter/CornerRadiusSplitConverter.cs | 29 +- 7 files changed, 672 insertions(+), 13 deletions(-) create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Themes/Styles/Expander.axaml create mode 100644 src/Avalonia/HandyControl_Avalonia/Tools/Converter/CornerRadiusSplitConverter.cs diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml new file mode 100644 index 00000000..c741d132 --- /dev/null +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml.cs new file mode 100644 index 00000000..1b4c88e7 --- /dev/null +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ExpanderDemo.axaml.cs @@ -0,0 +1,10 @@ +namespace HandyControlDemo.UserControl; + +public partial class ExpanderDemo : Avalonia.Controls.UserControl +{ + public ExpanderDemo() + { + InitializeComponent(); + } +} + diff --git a/src/Avalonia/HandyControl_Avalonia/Themes/Basic/Converters.axaml b/src/Avalonia/HandyControl_Avalonia/Themes/Basic/Converters.axaml index f13a5203..f2a7c333 100644 --- a/src/Avalonia/HandyControl_Avalonia/Themes/Basic/Converters.axaml +++ b/src/Avalonia/HandyControl_Avalonia/Themes/Basic/Converters.axaml @@ -6,5 +6,6 @@ + diff --git a/src/Avalonia/HandyControl_Avalonia/Themes/Styles/Expander.axaml b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/Expander.axaml new file mode 100644 index 00000000..d9f5ca90 --- /dev/null +++ b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/Expander.axaml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia/HandyControl_Avalonia/Themes/Theme.axaml b/src/Avalonia/HandyControl_Avalonia/Themes/Theme.axaml index f47d8824..02ebeef9 100644 --- a/src/Avalonia/HandyControl_Avalonia/Themes/Theme.axaml +++ b/src/Avalonia/HandyControl_Avalonia/Themes/Theme.axaml @@ -33,6 +33,7 @@ + diff --git a/src/Avalonia/HandyControl_Avalonia/Tools/Converter/CornerRadiusSplitConverter.cs b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/CornerRadiusSplitConverter.cs new file mode 100644 index 00000000..a61232dd --- /dev/null +++ b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/CornerRadiusSplitConverter.cs @@ -0,0 +1,37 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; + +namespace HandyControl.Tools.Converter; + +public class CornerRadiusSplitConverter : IValueConverter +{ + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is not CornerRadius cornerRadius) + { + return value; + } + + if (parameter is not string str) + { + return value; + } + + string[] arr = str.Split(','); + if (arr.Length != 4) + { + return cornerRadius; + } + + return new CornerRadius( + arr[0].Trim().Equals("1") ? cornerRadius.TopLeft : 0, + arr[1].Trim().Equals("1") ? cornerRadius.TopRight : 0, + arr[2].Trim().Equals("1") ? cornerRadius.BottomRight : 0, + arr[3].Trim().Equals("1") ? cornerRadius.BottomLeft : 0); + } + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) => + throw new NotImplementedException(); +} diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs index 6923ee18..e57c6395 100644 --- a/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs +++ b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs @@ -9,21 +9,24 @@ public class CornerRadiusSplitConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is CornerRadius cornerRadius) + if (value is not CornerRadius cornerRadius) { - if (parameter is string str) - { - var arr = str.Split(','); - if (arr.Length != 4) return cornerRadius; - - return new CornerRadius( - arr[0].Equals("1") ? cornerRadius.TopLeft : 0, - arr[1].Equals("1") ? cornerRadius.TopRight : 0, - arr[2].Equals("1") ? cornerRadius.BottomRight : 0, - arr[3].Equals("1") ? cornerRadius.BottomLeft : 0); - } + return value; } - return value; + + if (parameter is not string str) + { + return value; + } + + var arr = str.Split(','); + if (arr.Length != 4) return cornerRadius; + + return new CornerRadius( + arr[0].Trim().Equals("1") ? cornerRadius.TopLeft : 0, + arr[1].Trim().Equals("1") ? cornerRadius.TopRight : 0, + arr[2].Trim().Equals("1") ? cornerRadius.BottomRight : 0, + arr[3].Trim().Equals("1") ? cornerRadius.BottomLeft : 0); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)