diff --git a/demo/Ursa.Demo/Pages/DialogDemo.axaml b/demo/Ursa.Demo/Pages/DialogDemo.axaml
index 1e6e67f..d188caa 100644
--- a/demo/Ursa.Demo/Pages/DialogDemo.axaml
+++ b/demo/Ursa.Demo/Pages/DialogDemo.axaml
@@ -40,21 +40,21 @@
OffContent="No"
OnContent="Yes" />
-
-
+
+
-
-
+
+
-
+
-
+
@@ -73,8 +73,8 @@
OffContent="Local"
OnContent="Global" />
diff --git a/demo/Ursa.Demo/ViewModels/DialogDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DialogDemoViewModel.cs
index cf5d6b3..4301330 100644
--- a/demo/Ursa.Demo/ViewModels/DialogDemoViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/DialogDemoViewModel.cs
@@ -11,85 +11,27 @@ using Ursa.Demo.Pages;
namespace Ursa.Demo.ViewModels;
-public class DialogDemoViewModel: ObservableObject
+public partial class DialogDemoViewModel: ObservableObject
{
public ICommand ShowDialogCommand { get; set; }
public ICommand ShowCustomDialogCommand { get; set; }
- private DialogMode _selectedMode;
- public DialogMode SelectedMode
- {
- get => _selectedMode;
- set => SetProperty(ref _selectedMode, value);
- }
-
- public ObservableCollection Modes { get; set; }
-
- private DialogButton _selectedButton;
- public DialogButton SelectedButton
- {
- get => _selectedButton;
- set => SetProperty(ref _selectedButton, value);
- }
-
- public ObservableCollection Buttons { get; set; }
-
- private bool _isWindow;
- public bool IsWindow
- {
- get => _isWindow;
- set => SetProperty(ref _isWindow, value);
- }
-
- private bool _isGlobal;
- public bool IsGlobal
- {
- get => _isGlobal;
- set => SetProperty(ref _isGlobal, value);
- }
-
- private bool _isModal;
- public bool IsModal
- {
- get => _isModal;
- set => SetProperty(ref _isModal, value);
- }
-
- private bool _canLightDismiss;
- public bool CanLightDismiss
- {
- get => _canLightDismiss;
- set => SetProperty(ref _canLightDismiss, value);
- }
-
- private DialogResult? _defaultResult;
- public DialogResult? DefaultResult
- {
- get => _defaultResult;
- set => SetProperty(ref _defaultResult, value);
- }
-
- private bool _result;
- public bool Result
- {
- get => _result;
- set => SetProperty(ref _result, value);
- }
-
- private DateTime? _date;
- public DateTime? Date
- {
- get => _date;
- set => SetProperty(ref _date, value);
- }
-
+ [ObservableProperty] private DialogMode _selectedMode;
+ [ObservableProperty] private DialogButton _selectedButton;
+ [ObservableProperty] private bool _isWindow;
+ [ObservableProperty] private bool _isGlobal;
+ [ObservableProperty] private bool _isModal;
+ [ObservableProperty] private bool _canLightDismiss;
+ [ObservableProperty] private DialogResult? _defaultResult;
+ [ObservableProperty] private bool _result;
+ [ObservableProperty] private DateTime? _date;
public DialogDemoViewModel()
{
ShowDialogCommand = new AsyncRelayCommand(ShowDialog);
ShowCustomDialogCommand = new AsyncRelayCommand(ShowCustomDialog);
- Modes = new ObservableCollection(Enum.GetValues());
- Buttons = new ObservableCollection(Enum.GetValues());
+ IsModal = true;
+ IsGlobal = true;
}
private async Task ShowDialog()
@@ -149,7 +91,6 @@ public class DialogDemoViewModel: ObservableObject
var vm = new DialogWithActionViewModel();
if (IsWindow)
{
-
if (IsModal)
{
Result = await Dialog.ShowCustomModal(
@@ -161,7 +102,6 @@ public class DialogDemoViewModel: ObservableObject
Dialog.ShowCustom(
vm);
}
-
}
else
{
diff --git a/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs
index e51586b..c438020 100644
--- a/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/DrawerDemoViewModel.cs
@@ -31,6 +31,9 @@ public partial class DrawerDemoViewModel: ObservableObject
{
ShowDialogCommand = new AsyncRelayCommand(ShowDefaultDialog);
ShowCustomDialogCommand = new AsyncRelayCommand(ShowCustomDrawer);
+ SelectedPosition = Position.Right;
+ IsGlobal = true;
+ IsModal = true;
}
private async Task ShowDefaultDialog()
diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs
index d83c58a..1d53231 100644
--- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs
+++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs
@@ -48,6 +48,8 @@ public partial class OverlayDialogHost
control.Measure(this.Bounds.Size);
control.Arrange(new Rect(control.DesiredSize));
SetDrawerPosition(control);
+ _modalCount++;
+ HasModal = _modalCount > 0;
control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDrawerControlClosing);
var animation = CreateAnimation(control.Bounds.Size, control.Position);
await Task.WhenAll(animation.RunAsync(control), _maskAppearAnimation.RunAsync(mask));
@@ -145,10 +147,13 @@ public partial class OverlayDialogHost
control.RemoveHandler(DialogControlBase.LayerChangedEvent, OnDialogLayerChanged);
if (layer.Mask is not null)
{
+ _modalCount--;
+ HasModal = _modalCount > 0;
layer.Mask.RemoveHandler(PointerPressedEvent, ClickMaskToCloseDialog);
var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false);
await Task.WhenAll(disappearAnimation.RunAsync(control), _maskDisappearAnimation.RunAsync(layer.Mask));
Children.Remove(layer.Mask);
+
}
else
{