diff --git a/demo/Sandbox/App.axaml.cs b/demo/Sandbox/App.axaml.cs
index 3ead0df..e086f87 100644
--- a/demo/Sandbox/App.axaml.cs
+++ b/demo/Sandbox/App.axaml.cs
@@ -1,4 +1,5 @@
using Avalonia;
+using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
@@ -21,10 +22,7 @@ public partial class App : Application
// Line below is needed to remove Avalonia data validation.
// Without this line you will get duplicate validations from both Avalonia and CT
BindingPlugins.DataValidators.RemoveAt(0);
- desktop.MainWindow = new MainWindow
- {
- DataContext = new MainWindowViewModel(),
- };
+ desktop.MainWindow = new MainSplashWindow();
}
base.OnFrameworkInitializationCompleted();
diff --git a/demo/Sandbox/Views/MainSplashWindow.axaml b/demo/Sandbox/Views/MainSplashWindow.axaml
new file mode 100644
index 0000000..e5e6b73
--- /dev/null
+++ b/demo/Sandbox/Views/MainSplashWindow.axaml
@@ -0,0 +1,12 @@
+
+ Welcome to Avalonia Splash Window!
+
diff --git a/demo/Sandbox/Views/MainSplashWindow.axaml.cs b/demo/Sandbox/Views/MainSplashWindow.axaml.cs
new file mode 100644
index 0000000..58546f1
--- /dev/null
+++ b/demo/Sandbox/Views/MainSplashWindow.axaml.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Threading.Tasks;
+using System.Timers;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using Avalonia.Threading;
+using Sandbox.ViewModels;
+using Ursa.Controls;
+
+namespace Sandbox.Views;
+
+public partial class MainSplashWindow : SplashWindow
+{
+ public MainSplashWindow()
+ {
+ InitializeComponent();
+ }
+
+ protected override async Task CreateNextWindow()
+ {
+ return new MainWindow()
+ {
+ DataContext = new MainWindowViewModel()
+ };
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/App.axaml.cs b/demo/Ursa.Demo/App.axaml.cs
index 980608c..92e928f 100644
--- a/demo/Ursa.Demo/App.axaml.cs
+++ b/demo/Ursa.Demo/App.axaml.cs
@@ -18,9 +18,9 @@ public partial class App : Application
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
- desktop.MainWindow = new MainWindow()
+ desktop.MainWindow = new MvvmSplashWindow()
{
- DataContext = new MainViewViewModel(),
+ DataContext = new SplashViewModel()
};
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
diff --git a/demo/Ursa.Demo/ViewModels/SplashViewModel.cs b/demo/Ursa.Demo/ViewModels/SplashViewModel.cs
new file mode 100644
index 0000000..c2e2d14
--- /dev/null
+++ b/demo/Ursa.Demo/ViewModels/SplashViewModel.cs
@@ -0,0 +1,38 @@
+using System;
+using Avalonia.Threading;
+using CommunityToolkit.Mvvm.ComponentModel;
+using Irihi.Avalonia.Shared.Contracts;
+
+namespace Ursa.Demo.ViewModels;
+
+public partial class SplashViewModel: ObservableObject, IDialogContext
+{
+ [ObservableProperty] private double _progress;
+ private Random _r = new();
+
+ public SplashViewModel()
+ {
+ DispatcherTimer.Run(OnUpdate, TimeSpan.FromMilliseconds(20), DispatcherPriority.Default);
+ }
+
+ private bool OnUpdate()
+ {
+ Progress += 10 * _r.NextDouble();
+ if (Progress <= 100)
+ {
+ return true;
+ }
+ else
+ {
+ RequestClose?.Invoke(this, true);
+ return false;
+ }
+ }
+
+ public void Close()
+ {
+ RequestClose?.Invoke(this, false);
+ }
+
+ public event EventHandler