From 2c0875ebd67326e0c67282967e3e809c69282fee Mon Sep 17 00:00:00 2001
From: NaBian <836904362@qq.com>
Date: Sat, 27 Jun 2026 17:36:21 +0800
Subject: [PATCH] feat: Add Dialog styles and demo.
---
.../Data/DemoInfo.json | 1 +
.../MainWindow.axaml.cs | 11 +-
.../UserControl/Basic/InteractiveDialog.axaml | 22 ++
.../Basic/InteractiveDialog.axaml.cs | 14 ++
.../UserControl/Basic/TextDialog.axaml | 25 +++
.../UserControl/Basic/TextDialog.axaml.cs | 15 ++
.../Basic/TextDialogWithTimer.axaml | 35 +++
.../Basic/TextDialogWithTimer.axaml.cs | 44 ++++
.../UserControl/Controls/DialogDemo.axaml | 46 ++++
.../UserControl/Controls/DialogDemo.axaml.cs | 16 ++
.../Basic/InteractiveDialogViewModel.cs | 20 ++
.../ViewModel/Controls/DialogDemoViewModel.cs | 70 ++++++
.../ViewModel/ViewModelLocator.cs | 3 +
.../Window/DialogDemoWindow.axaml | 29 +++
.../Window/DialogDemoWindow.axaml.cs | 19 ++
.../Controls/Dialog/Dialog.cs | 211 ++++++++++++++++++
.../Controls/Dialog/DialogContainer.cs | 8 +
.../Themes/Styles/Dialog.axaml | 30 +++
.../Themes/Styles/MergedStyles.axaml | 1 +
.../Tools/Extension/DialogExtension.cs | 77 +++++++
20 files changed, 695 insertions(+), 2 deletions(-)
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialogWithTimer.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialogWithTimer.axaml.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/DialogDemo.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Controls/DialogDemo.axaml.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Basic/InteractiveDialogViewModel.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Controls/DialogDemoViewModel.cs
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/Window/DialogDemoWindow.axaml
create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/Window/DialogDemoWindow.axaml.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/Dialog/Dialog.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Controls/Dialog/DialogContainer.cs
create mode 100644 src/Avalonia/HandyControl_Avalonia/Themes/Styles/Dialog.axaml
create mode 100644 src/Avalonia/HandyControl_Avalonia/Tools/Extension/DialogExtension.cs
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
index 99a09b72..37ca1e64 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
+++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json
@@ -42,6 +42,7 @@
"group": true,
"demoItemList": [
[ "ConfettiCannon", "ConfettiCannonDemo", "Brush.Favorite", "", "Interacting" ],
+ [ "Dialog", "DialogDemo", "Brush.Dialog", "", "Feedback" ],
[ "Gravatar", "GravatarDemo", "Brush.User", "", "DataDisplay" ],
[ "ButtonGroup", "ButtonGroupDemo", "Brush.ButtonGroup", "", "Button" ],
[ "ProgressButton", "ProgressButtonDemo", "Brush.ProgressBarStatusBar8", "", "Button" ],
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/MainWindow.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/MainWindow.axaml.cs
index c0972560..c58fa935 100644
--- a/src/Avalonia/HandyControlDemo_Avalonia/MainWindow.axaml.cs
+++ b/src/Avalonia/HandyControlDemo_Avalonia/MainWindow.axaml.cs
@@ -1,13 +1,20 @@
using Avalonia.Controls;
using Avalonia.Interactivity;
+using HandyControl.Controls;
+using HandyControlDemo.Data;
using HandyControlDemo.UserControl;
using HandyControlDemo.ViewModel;
namespace HandyControlDemo;
-public partial class MainWindow : Window
+public partial class MainWindow : Avalonia.Controls.Window
{
- public MainWindow() => InitializeComponent();
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ Dialog.SetToken(this, MessageToken.MainWindow);
+ }
protected override void OnLoaded(RoutedEventArgs e)
{
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml
new file mode 100644
index 00000000..52a6ead6
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml.cs
new file mode 100644
index 00000000..622182ab
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/InteractiveDialog.axaml.cs
@@ -0,0 +1,14 @@
+using Avalonia.Controls;
+using HandyControlDemo.ViewModel;
+
+namespace HandyControlDemo.UserControl;
+
+public partial class InteractiveDialog : Border
+{
+ public InteractiveDialog()
+ {
+ InitializeComponent();
+
+ DataContext = new InteractiveDialogViewModel();
+ }
+}
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml
new file mode 100644
index 00000000..3fc2ea61
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml.cs
new file mode 100644
index 00000000..d09ecd2c
--- /dev/null
+++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Basic/TextDialog.axaml.cs
@@ -0,0 +1,15 @@
+using Avalonia.Controls;
+using Avalonia.VisualTree;
+using HandyControl.Controls;
+
+namespace HandyControlDemo.UserControl;
+
+public partial class TextDialog : Border
+{
+ public TextDialog()
+ {
+ InitializeComponent();
+
+ CloseButton.Click += (_, _) => this.FindAncestorOfType