diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml
new file mode 100644
index 00000000..01f09cc8
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml.cs
new file mode 100644
index 00000000..5010c713
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ToggleButtonDemoCtl.axaml.cs
@@ -0,0 +1,9 @@
+namespace HandyControlDemo.UserControl;
+
+public partial class ToggleButtonDemoCtl : Avalonia.Controls.UserControl
+{
+ public ToggleButtonDemoCtl()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Attach/IconSwitchElement.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/IconSwitchElement.cs
new file mode 100644
index 00000000..582f55ba
--- /dev/null
+++ b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/IconSwitchElement.cs
@@ -0,0 +1,35 @@
+using Avalonia;
+using Avalonia.Media;
+
+namespace HandyControl.Controls;
+
+public class IconSwitchElement
+{
+ public static readonly AttachedProperty GeometryProperty =
+ AvaloniaProperty.RegisterAttached("Geometry");
+
+ public static void SetGeometry(AvaloniaObject element, Geometry value) => element.SetValue(GeometryProperty, value);
+
+ public static Geometry GetGeometry(AvaloniaObject element) => element.GetValue(GeometryProperty);
+
+ public static readonly AttachedProperty WidthProperty =
+ AvaloniaProperty.RegisterAttached("Width", defaultValue: double.NaN);
+
+ public static void SetWidth(AvaloniaObject element, double value) => element.SetValue(WidthProperty, value);
+
+ public static double GetWidth(AvaloniaObject element) => element.GetValue(WidthProperty);
+
+ public static readonly AttachedProperty HeightProperty =
+ AvaloniaProperty.RegisterAttached("Height", defaultValue: double.NaN);
+
+ public static void SetHeight(AvaloniaObject element, double value) => element.SetValue(HeightProperty, value);
+ public static double GetHeight(AvaloniaObject element) => element.GetValue(HeightProperty);
+
+ public static readonly AttachedProperty GeometrySelectedProperty =
+ AvaloniaProperty.RegisterAttached("GeometrySelected");
+
+ public static void SetGeometrySelected(AvaloniaObject element, Geometry value) =>
+ element.SetValue(GeometrySelectedProperty, value);
+
+ public static Geometry GetGeometrySelected(AvaloniaObject element) => element.GetValue(GeometrySelectedProperty);
+}
diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Attach/StatusSwitchElement.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/StatusSwitchElement.cs
new file mode 100644
index 00000000..6bede12a
--- /dev/null
+++ b/src/Avalonia/HandyControl_Avalonia/Controls/Attach/StatusSwitchElement.cs
@@ -0,0 +1,23 @@
+using Avalonia;
+
+namespace HandyControl.Controls;
+
+public class StatusSwitchElement
+{
+ public static readonly AttachedProperty