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)