From 2fb12122f3a85ed8557285274941736140d38d90 Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Sat, 2 Aug 2025 22:45:20 +0800
Subject: [PATCH] chore: add avalonia basic TextBox demo.
---
README-cn.md | 3 -
README.md | 3 -
src/Avalonia/Directory.Build.props | 2 +-
.../Data/DemoInfo.json | 2 +-
.../HandyControlDemo_Avalonia.csproj | 6 +
.../UserControl/Styles/TextBoxDemo.axaml | 90 ++++++
.../UserControl/Styles/TextBoxDemo.axaml.cs | 10 +
.../Controls/Attach/InfoElement.cs | 63 ++++
.../Controls/Attach/TextBlockAttach.cs | 53 ++++
.../Controls/Attach/TitleElement.cs | 89 +++++-
.../Data/Enum/TitlePlacementType.cs | 7 +
.../Themes/Basic/Brushes.axaml | 2 +
.../Themes/Basic/Colors.axaml | 2 +
.../Themes/Basic/Converters.axaml | 1 +
.../Themes/Styles/TextBox.axaml | 292 ++++++++++++++++++
.../HandyControl_Avalonia/Themes/Theme.axaml | 1 +
.../Converter/Double2GridLengthConverter.cs | 29 ++
.../Properties/Langs/Lang.cs.resx | 60 ++--
.../Controls/Attach/InfoElement.cs | 4 +-
.../Controls/Attach/TitleElement.cs | 6 +-
20 files changed, 677 insertions(+), 48 deletions(-)
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/Attach/InfoElement.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/Attach/TextBlockAttach.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Data/Enum/TitlePlacementType.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Themes/Styles/TextBox.axaml
create mode 100644 src/Avalonia/HandyControl_Avalonia/Tools/Converter/Double2GridLengthConverter.cs
diff --git a/README-cn.md b/README-cn.md
index 3ca61a9d..df1eec5d 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -1,6 +1,3 @@
-### 找工作
-我有一个朋友,9 年工作经验,github 主页:https://github.com/DingpingZhang 目前在找上海的工作。他熟悉设计模式并具有大型客户端架构经验,技术栈涉及:python、wpf、pg、react,有意向可联系邮箱:dingpingzhang@outlook.com
-
## 友情链接
[SimpleFactoryGenerator](https://github.com/DingpingZhang/SimpleFactoryGenerator) - A simple factory source generator that enables the pattern to not violate the open-close principle.
diff --git a/README.md b/README.md
index ecdbdc61..4bdc4651 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,3 @@
-### 找工作
-我有一个朋友,9 年工作经验,github 主页:https://github.com/DingpingZhang 目前在找上海的工作。他熟悉设计模式并具有大型客户端架构经验,技术栈涉及:python、wpf、pg、react,有意向可联系邮箱:dingpingzhang@outlook.com
-
## Blogroll
[SimpleFactoryGenerator](https://github.com/DingpingZhang/SimpleFactoryGenerator) - A simple factory source generator that enables the pattern to not violate the open-close principle.
diff --git a/src/Avalonia/Directory.Build.props b/src/Avalonia/Directory.Build.props
index d93f9fc3..02fc2c07 100644
--- a/src/Avalonia/Directory.Build.props
+++ b/src/Avalonia/Directory.Build.props
@@ -1,6 +1,6 @@
enable
- 11.1.1
+ 11.3.2
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
index 6b5fc93e..b97fd95b 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
+++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
@@ -13,7 +13,7 @@
[ "ScrollViewer", "NativeScrollViewerDemo", "Brush.ScrollBox", "", "" ],
[ "Slider", "SliderDemo", "Brush.Slider", "", "" ],
[ "TextBlock", "TextBlockDemo", "Brush.TextBlock", "", "" ],
- [ "TextBox", "NativeTextBoxDemo", "Brush.TextBox", "", "" ],
+ [ "TextBox", "TextBoxDemo", "Brush.TextBox", "", "" ],
[ "ComboBox", "NativeComboBoxDemo", "Brush.ComboBox", "", "" ],
[ "PasswordBox", "NativePasswordBoxDemo", "Brush.PasswordBox", "", "" ],
[ "Expander", "ExpanderDemo", "Brush.Expander", "", "" ],
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/HandyControlDemo_Avalonia.csproj b/src/Avalonia/HandyControlDemo_Avalonia/HandyControlDemo_Avalonia.csproj
index d4423cf0..6cbc46b6 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/HandyControlDemo_Avalonia.csproj
+++ b/src/Avalonia/HandyControlDemo_Avalonia/HandyControlDemo_Avalonia.csproj
@@ -11,6 +11,12 @@
HandyControlDemo
HandyControlDemo
+
+ 1701;1702;NETSDK1138
+
+
+ 1701;1702;NETSDK1138
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml
new file mode 100644
index 00000000..af22a407
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml.cs
new file mode 100644
index 00000000..21a25f5f
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/TextBoxDemo.axaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl;
+
+public partial class TextBoxDemo : Avalonia.Controls.UserControl
+{
+ public TextBoxDemo()
+ {
+ InitializeComponent();
+ }
+}
+
diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Attach/InfoElement.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/InfoElement.cs
new file mode 100644
index 00000000..e522552d
--- /dev/null
+++ b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/InfoElement.cs
@@ -0,0 +1,63 @@
+using Avalonia;
+
+namespace HandyControl.Controls;
+
+public class InfoElement
+{
+ public static readonly AttachedProperty NecessaryProperty =
+ AvaloniaProperty.RegisterAttached("Necessary", inherits: true);
+
+ public static void SetNecessary(AvaloniaObject element, bool value) => element.SetValue(NecessaryProperty, value);
+
+ public static bool GetNecessary(AvaloniaObject element) => element.GetValue(NecessaryProperty);
+
+ public static readonly AttachedProperty