From b36b3b4ed89dafd92affe490af6e01b861a59e43 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sat, 13 Jun 2026 23:41:42 +0800 Subject: [PATCH] feat: Add ConfettiCannon control and demo. --- .../Data/DemoInfo.json | 3 +- .../Resources/Themes/Basic/Brushes.axaml | 14 +- .../Controls/ConfettiCannonDemo.axaml | 36 ++ .../Controls/ConfettiCannonDemo.axaml.cs | 297 +++++++++++++ .../Controls/ConfettiCannon/ConfettiCannon.cs | 404 ++++++++++++++++++ .../ConfettiCannon/ConfettiCannonContainer.cs | 9 + .../ConfettiCannon/ConfettiOverlay.cs | 160 +++++++ .../Tools/Helper/ControlTokenManager`1.cs | 131 ++++++ 8 files changed, 1052 insertions(+), 2 deletions(-) create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ConfettiCannonDemo.axaml create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ConfettiCannonDemo.axaml.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/ConfettiCannon/ConfettiCannon.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/ConfettiCannon/ConfettiCannonContainer.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/ConfettiCannon/ConfettiOverlay.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Tools/Helper/ControlTokenManager`1.cs diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json index 93e909e6..545fe3f7 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json +++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json @@ -1,4 +1,4 @@ -[ +[ { "title": "Styles", "selectedIndex": 0, @@ -35,6 +35,7 @@ "group": true, "demoItemList": [ [ "FloatingBlock", "FloatingBlockDemo", "Brush.LikeFilled", "", "Interacting" ], + [ "ConfettiCannon", "ConfettiCannonDemo", "Brush.Favorite", "", "Interacting" ], [ "PropertyGrid", "PropertyGridDemo", "Brush.PropertyGridEditorPart", "", "DataEntry" ], [ "ImageSelector", "ImageSelectorDemo", "Brush.Image", "", "DataEntry" ], [ "ImageBlock", "ImageBlockDemo", "Brush.ImageStack", "", "DataDisplay" ], diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Resources/Themes/Basic/Brushes.axaml b/src/Avalonia/HandyControlDemo_Avalonia/Resources/Themes/Basic/Brushes.axaml index 36cbf4fe..84ba73aa 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/Resources/Themes/Basic/Brushes.axaml +++ b/src/Avalonia/HandyControlDemo_Avalonia/Resources/Themes/Basic/Brushes.axaml @@ -1,4 +1,4 @@ - + + + + + + + + + + + + diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ConfettiCannonDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ConfettiCannonDemo.axaml new file mode 100644 index 00000000..034de458 --- /dev/null +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/ConfettiCannonDemo.axaml @@ -0,0 +1,36 @@ + + + + +