From 82312e747757b92fc28921a639648cd8b101ef42 Mon Sep 17 00:00:00 2001
From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
Date: Wed, 26 Jul 2023 10:20:13 +0800
Subject: [PATCH 01/13] feat: initial DualBadge.
---
demo/Ursa.Demo/Models/MenuKeys.cs | 1 +
demo/Ursa.Demo/Pages/DualBadgeDemo.axaml | 23 ++++++++
demo/Ursa.Demo/Pages/DualBadgeDemo.axaml.cs | 11 ++++
.../ViewModels/DualBadgeDemoViewModel.cs | 5 ++
.../Ursa.Demo/ViewModels/MainViewViewModel.cs | 1 +
demo/Ursa.Demo/ViewModels/MenuViewModel.cs | 1 +
src/Ursa.Themes.Semi/Controls/DualBadge.axaml | 45 ++++++++++++++++
src/Ursa.Themes.Semi/Controls/_index.axaml | 1 +
.../Themes/Dark/DualBadge.axaml | 3 ++
src/Ursa.Themes.Semi/Themes/Dark/_index.axaml | 1 +
.../Themes/Light/DualBadge.axaml | 3 ++
.../Themes/Light/_index.axaml | 1 +
.../Themes/Shared/DualBadge.axaml | 2 +
.../Themes/Shared/_index.axaml | 1 +
src/Ursa/Controls/DualBadge.cs | 53 +++++++++++++++++++
15 files changed, 152 insertions(+)
create mode 100644 demo/Ursa.Demo/Pages/DualBadgeDemo.axaml
create mode 100644 demo/Ursa.Demo/Pages/DualBadgeDemo.axaml.cs
create mode 100644 demo/Ursa.Demo/ViewModels/DualBadgeDemoViewModel.cs
create mode 100644 src/Ursa.Themes.Semi/Controls/DualBadge.axaml
create mode 100644 src/Ursa.Themes.Semi/Themes/Dark/DualBadge.axaml
create mode 100644 src/Ursa.Themes.Semi/Themes/Light/DualBadge.axaml
create mode 100644 src/Ursa.Themes.Semi/Themes/Shared/DualBadge.axaml
create mode 100644 src/Ursa/Controls/DualBadge.cs
diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs
index 5a76eb9..1d8954e 100644
--- a/demo/Ursa.Demo/Models/MenuKeys.cs
+++ b/demo/Ursa.Demo/Models/MenuKeys.cs
@@ -6,6 +6,7 @@ public static class MenuKeys
public const string MenuKeyBanner = "Banner";
public const string MenuKeyButtonGroup = "ButtonGroup";
public const string MenuKeyDivider = "Divider";
+ public const string MenuKeyDualBadge = "DualBadge";
public const string MenuKeyIpBox = "IPv4Box";
public const string MenuKeyLoading = "Loading";
public const string MenuKeyNavigation = "Navigation";
diff --git a/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml b/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml
new file mode 100644
index 0000000..d0aea05
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ passing
+
+
+
\ No newline at end of file
diff --git a/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml.cs b/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml.cs
new file mode 100644
index 0000000..6db9c2f
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/DualBadgeDemo.axaml.cs
@@ -0,0 +1,11 @@
+using Avalonia.Controls;
+
+namespace Ursa.Demo.Pages;
+
+public partial class DualBadgeDemo : UserControl
+{
+ public DualBadgeDemo()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/DualBadgeDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DualBadgeDemoViewModel.cs
new file mode 100644
index 0000000..bc992fc
--- /dev/null
+++ b/demo/Ursa.Demo/ViewModels/DualBadgeDemoViewModel.cs
@@ -0,0 +1,5 @@
+namespace Ursa.Demo.ViewModels;
+
+public class DualBadgeDemoViewModel : ViewModelBase
+{
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
index 6641f1f..54109ae 100644
--- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
@@ -28,6 +28,7 @@ public class MainViewViewModel : ViewModelBase
MenuKeys.MenuKeyBanner => new BannerDemoViewModel(),
MenuKeys.MenuKeyButtonGroup => new ButtonGroupDemoViewModel(),
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
+ MenuKeys.MenuKeyDualBadge => new DualBadgeDemoViewModel(),
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
MenuKeys.MenuKeyNavigation => new NavigationMenuDemoViewModel(),
diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
index 9351ad9..011375b 100644
--- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
@@ -15,6 +15,7 @@ public class MenuViewModel: ViewModelBase
new() { MenuHeader = "Banner", Key = MenuKeys.MenuKeyBanner },
new() { MenuHeader = "ButtonGroup", Key = MenuKeys.MenuKeyButtonGroup },
new() { MenuHeader = "Divider", Key = MenuKeys.MenuKeyDivider },
+ new() { MenuHeader = "DualBadge", Key = MenuKeys.MenuKeyDualBadge },
new() { MenuHeader = "IPv4Box", Key = MenuKeys.MenuKeyIpBox },
new() { MenuHeader = "Loading", Key = MenuKeys.MenuKeyLoading },
new() { MenuHeader = "Navigation", Key = MenuKeys.MenuKeyNavigation },
diff --git a/src/Ursa.Themes.Semi/Controls/DualBadge.axaml b/src/Ursa.Themes.Semi/Controls/DualBadge.axaml
new file mode 100644
index 0000000..05ec0de
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/DualBadge.axaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml
index bbf2752..dee9b3c 100644
--- a/src/Ursa.Themes.Semi/Controls/_index.axaml
+++ b/src/Ursa.Themes.Semi/Controls/_index.axaml
@@ -5,6 +5,7 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Dark/DualBadge.axaml b/src/Ursa.Themes.Semi/Themes/Dark/DualBadge.axaml
new file mode 100644
index 0000000..d57aae4
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Dark/DualBadge.axaml
@@ -0,0 +1,3 @@
+
+ LightGray
+
diff --git a/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml b/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
index c9f2bea..aa85239 100644
--- a/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
@@ -5,6 +5,7 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Light/DualBadge.axaml b/src/Ursa.Themes.Semi/Themes/Light/DualBadge.axaml
new file mode 100644
index 0000000..d57aae4
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Light/DualBadge.axaml
@@ -0,0 +1,3 @@
+
+ LightGray
+
diff --git a/src/Ursa.Themes.Semi/Themes/Light/_index.axaml b/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
index c9f2bea..aa85239 100644
--- a/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
@@ -5,6 +5,7 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Shared/DualBadge.axaml b/src/Ursa.Themes.Semi/Themes/Shared/DualBadge.axaml
new file mode 100644
index 0000000..c9ef25a
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Shared/DualBadge.axaml
@@ -0,0 +1,2 @@
+
+
diff --git a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
index 777a0a4..7bf0b4d 100644
--- a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
@@ -5,6 +5,7 @@
+
diff --git a/src/Ursa/Controls/DualBadge.cs b/src/Ursa/Controls/DualBadge.cs
new file mode 100644
index 0000000..94f9664
--- /dev/null
+++ b/src/Ursa/Controls/DualBadge.cs
@@ -0,0 +1,53 @@
+using Avalonia;
+using Avalonia.Controls.Metadata;
+using Avalonia.Controls.Presenters;
+using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Templates;
+using Avalonia.Media;
+
+namespace Ursa.Controls;
+
+[TemplatePart(PART_Icon, typeof(ContentPresenter))]
+public class DualBadge : HeaderedContentControl
+{
+ public const string PART_HeaderPresenter = "PART_HeaderPresenter";
+ public const string PART_ContentPresenter = "PART_ContentPresenter";
+ public const string PART_Icon = "PART_Icon";
+
+ public static readonly StyledProperty