From 7b0e9ba108fc33f36e28cf6e9445ca27c96ec33f Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Wed, 17 Jun 2026 00:26:54 +0800
Subject: [PATCH] feat: Add Shield styles and demos.
---
.../Data/DemoInfo.json | 3 +-
.../UserControl/Controls/BadgeDemo.axaml | 17 +++---
.../UserControl/Controls/ShieldDemo.axaml | 22 ++++++++
.../UserControl/Controls/ShieldDemo.axaml.cs | 9 ++++
.../Controls/Other/Shield.cs | 40 ++++++++++++++
.../Themes/Styles/MergedStyles.axaml | 1 +
.../Themes/Styles/Shield.axaml | 53 +++++++++++++++++++
7 files changed, 136 insertions(+), 9 deletions(-)
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/Other/Shield.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Themes/Styles/Shield.axaml
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
index 6644a740..09954a0f 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
+++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
@@ -56,7 +56,8 @@
[ "Rate", "RateDemo", "Brush.Favorite", "", "Feedback" ],
[ "Loading", "LoadingDemo", "Brush.Loading", "", "Feedback" ],
[ "Tag", "TagDemo", "Brush.Tag", "", "DataDisplay" ],
- [ "Badge", "BadgeDemo", "Brush.CheckDot", "", "DataDisplay" ]
+ [ "Badge", "BadgeDemo", "Brush.CheckDot", "", "DataDisplay" ],
+ [ "Shield", "ShieldDemo", "Brush.SplitKeyValuePair", "", "DataDisplay" ]
]
}
]
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/BadgeDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/BadgeDemo.axaml
index f690f978..df1beeb5 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/BadgeDemo.axaml
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/BadgeDemo.axaml
@@ -1,9 +1,10 @@
-
+
-
+
-
+
+ Content="{x:Static langs:Lang.Click2Count}" />
-
+
-
+
-
+
-
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml
new file mode 100644
index 00000000..85b97c88
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml.cs
new file mode 100644
index 00000000..5ab8aed4
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ShieldDemo.axaml.cs
@@ -0,0 +1,9 @@
+namespace HandyControlDemo.UserControl;
+
+public partial class ShieldDemo : Avalonia.Controls.UserControl
+{
+ public ShieldDemo()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/src/Avalonia/HandyControl_Avalonia/Controls/Other/Shield.cs b/src/Avalonia/HandyControl_Avalonia/Controls/Other/Shield.cs
new file mode 100644
index 00000000..9f3ac7b5
--- /dev/null
+++ b/src/Avalonia/HandyControl_Avalonia/Controls/Other/Shield.cs
@@ -0,0 +1,40 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Media;
+using Avalonia.Metadata;
+
+namespace HandyControl.Controls;
+
+///
+/// 徽章
+///
+public class Shield : Button
+{
+ public static readonly StyledProperty SubjectProperty =
+ AvaloniaProperty.Register(nameof(Subject));
+
+ public string? Subject
+ {
+ get => GetValue(SubjectProperty);
+ set => SetValue(SubjectProperty, value);
+ }
+
+ public static readonly StyledProperty