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