feat: add CanClose hook to easily block window closing.

This commit is contained in:
rabbitism
2024-10-07 17:53:41 +08:00
parent d0e57ba6ed
commit 8ee920bde4
2 changed files with 27 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
using System.Threading.Tasks;
using Ursa.Controls; using Ursa.Controls;
namespace Ursa.Demo.Views; namespace Ursa.Demo.Views;
@@ -8,4 +9,10 @@ public partial class MainWindow : UrsaWindow
{ {
InitializeComponent(); InitializeComponent();
} }
protected override async Task<bool> CanClose()
{
var result = await MessageBox.ShowOverlayAsync("Are you sure you want to exit?", "Exit", button: MessageBoxButton.YesNo);
return result == MessageBoxResult.Yes;
}
} }

View File

@@ -1,3 +1,4 @@
using System.ComponentModel;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
@@ -100,5 +101,24 @@ public class UrsaWindow: Window
set => SetValue(TitleBarMarginProperty, value); set => SetValue(TitleBarMarginProperty, value);
} }
protected virtual async Task<bool> CanClose()
{
return await Task.FromResult(true);
}
private bool _canClose = false;
protected override async void OnClosing(WindowClosingEventArgs e)
{
VerifyAccess();
if (!_canClose)
{
e.Cancel = true;
_canClose = await CanClose();
if (_canClose)
{
Close();
}
}
base.OnClosing(e);
}
} }