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