From f9982820a94bac13886e80e6802629d40a4d655d Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 3 Aug 2025 16:14:35 +0800 Subject: [PATCH] enhance: avalonia TextBox demo. --- .../Data/DemoInfo.json | 5 +- .../UserControl/Styles/TextBoxDemo.axaml | 10 + .../Themes/Basic/Converters.axaml | 1 + .../Themes/Styles/TextBox.axaml | 230 +++++++++++------- .../Converter/Double2GridLengthConverter.cs | 4 +- .../Converter/ThicknessSplitConverter.cs | 36 +++ .../Converter/ThicknessSplitConverter.cs | 51 ++-- 7 files changed, 208 insertions(+), 129 deletions(-) create mode 100644 src/Avalonia/HandyControl_Avalonia/Tools/Converter/ThicknessSplitConverter.cs diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json index b97fd95b..be2fde9a 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json +++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json @@ -24,11 +24,8 @@ [ "DataGrid", "DataGridDemo", "Brush.DataGrid", "", "" ], [ "TreeView", "TreeViewDemo", "Brush.TreeView", "", "" ], [ "ListBox", "ListBoxDemo", "Brush.ListBox", "", "" ], - [ "ListView", "ListViewDemo", "Brush.ListView", "", "" ], [ "GroupBox", "GroupBoxDemo", "Brush.GroupBox", "", "" ], [ "Menu", "MenuDemo", "Brush.ContextMenu", "", "" ], - [ "RichTextBox", "RichTextBoxDemo", "Brush.RichTextBox", "", "" ], - [ "FlowDocument", "FlowDocumentDemo", "Brush.WPFFlowDocument", "", "" ], [ "ToolBar", "ToolBarDemo", "Brush.ToolBar", "", "" ], [ "Border", "BorderDemo", "Brush.BorderElement", "", "" ], [ "Label", "LabelDemo", "Brush.Label", "", "" ], @@ -121,7 +118,7 @@ "group": false, "demoItemList": [ [ "HatchBrushGenerator", "HatchBrushGeneratorDemo", "Brush.DataGenerator", "", "" ], - [ "Morphing_Animation", "GeometryAnimationDemo", "Brush.Animation", "", "" ], + [ "MorphingAnimation", "GeometryAnimationDemo", "Brush.Animation", "", "" ], [ "Effects", "EffectsDemo", "Brush.Effects", "", "" ] ] } diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml index af22a407..5ba14391 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml @@ -21,6 +21,11 @@ Theme="{StaticResource TextBoxExtend}" Margin="0,32,0,0" Text="This is the content" /> + + + - - - - - - - - + + + + + + + + + + + @@ -191,50 +218,77 @@ TextTrimming="CharacterEllipsis" Text="{Binding Path=(hc:TitleElement.Title), RelativeSource={RelativeSource TemplatedParent}}" /> - - - - - - - - + + + + + + + + + + + diff --git a/src/Avalonia/HandyControl_Avalonia/Tools/Converter/Double2GridLengthConverter.cs b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/Double2GridLengthConverter.cs index 9559edb3..abab711f 100644 --- a/src/Avalonia/HandyControl_Avalonia/Tools/Converter/Double2GridLengthConverter.cs +++ b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/Double2GridLengthConverter.cs @@ -7,7 +7,7 @@ namespace HandyControl.Tools.Converter; public class Double2GridLengthConverter : IValueConverter { - public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is not double doubleValue) { @@ -22,7 +22,7 @@ public class Double2GridLengthConverter : IValueConverter return new GridLength(doubleValue); } - public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) { throw new NotSupportedException(); } diff --git a/src/Avalonia/HandyControl_Avalonia/Tools/Converter/ThicknessSplitConverter.cs b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/ThicknessSplitConverter.cs new file mode 100644 index 00000000..d0c32198 --- /dev/null +++ b/src/Avalonia/HandyControl_Avalonia/Tools/Converter/ThicknessSplitConverter.cs @@ -0,0 +1,36 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; + +namespace HandyControl.Tools.Converter; + +public class ThicknessSplitConverter : IValueConverter +{ + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is not Thickness thickness || parameter is not string str) + { + return value; + } + + string[] arr = str.Split(','); + + if (arr.Length != 4) + { + return thickness; + } + + return new Thickness( + left: double.TryParse(arr[0], out double leftTimes) ? leftTimes * thickness.Left : thickness.Left, + top: double.TryParse(arr[1], out double topTimes) ? topTimes * thickness.Top : thickness.Top, + right: double.TryParse(arr[2], out double rightTimes) ? rightTimes * thickness.Right : thickness.Right, + bottom: double.TryParse(arr[3], out double bottomTimes) ? bottomTimes * thickness.Bottom : thickness.Bottom + ); + } + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } +} diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs index 8fd89f3a..030acc9d 100644 --- a/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs +++ b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs @@ -9,43 +9,24 @@ public class ThicknessSplitConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is Thickness thickness) + if (value is not Thickness thickness || parameter is not string str) { - if (parameter is string str) - { - var arr = str.Split(','); - - if (arr.Length != 4) - { - return thickness; - } - - var result = new Thickness(thickness.Left, thickness.Top, thickness.Right, thickness.Bottom); - - if (double.TryParse(arr[0], out double leftTimes)) - { - result.Left = leftTimes * thickness.Left; - } - - if (double.TryParse(arr[1], out double topTimes)) - { - result.Top = topTimes * thickness.Top; - } - - if (double.TryParse(arr[2], out double rightTimes)) - { - result.Right = rightTimes * thickness.Right; - } - - if (double.TryParse(arr[3], out double bottomTimes)) - { - result.Bottom = bottomTimes * thickness.Bottom; - } - - return result; - } + return value; } - return value; + + var arr = str.Split(','); + + if (arr.Length != 4) + { + return thickness; + } + + return new Thickness( + left: double.TryParse(arr[0], out double leftTimes) ? leftTimes * thickness.Left : thickness.Left, + top: double.TryParse(arr[1], out double topTimes) ? topTimes * thickness.Top : thickness.Top, + right: double.TryParse(arr[2], out double rightTimes) ? rightTimes * thickness.Right : thickness.Right, + bottom: double.TryParse(arr[3], out double bottomTimes) ? bottomTimes * thickness.Bottom : thickness.Bottom + ); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)