diff --git a/demo/Ursa.Demo/Views/MainView.axaml b/demo/Ursa.Demo/Views/MainView.axaml
index 31d58a1..956dbe4 100644
--- a/demo/Ursa.Demo/Views/MainView.axaml
+++ b/demo/Ursa.Demo/Views/MainView.axaml
@@ -16,81 +16,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs
index f1aa68f..ddb3342 100644
--- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs
+++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs
@@ -92,7 +92,7 @@ public partial class OverlayDialogHost
Children.Add(mask);
}
this.Children.Add(control);
- _layers.Add(new DialogPair(mask, control));
+ _layers.Add(new DialogPair(mask, control, false));
control.Measure(this.Bounds.Size);
control.Arrange(new Rect(control.DesiredSize));
SetToPosition(control);
@@ -118,6 +118,11 @@ public partial class OverlayDialogHost
{
await _maskDisappearAnimation.RunAsync(layer.Mask);
Children.Remove(layer.Mask);
+ if (layer.Modal)
+ {
+ _modalCount--;
+ HasModal = _modalCount > 0;
+ }
}
ResetZIndices();
@@ -142,6 +147,8 @@ public partial class OverlayDialogHost
control.AddHandler(OverlayFeedbackElement.ClosedEvent, OnDialogControlClosing);
control.AddHandler(DialogControlBase.LayerChangedEvent, OnDialogLayerChanged);
_maskAppearAnimation.RunAsync(mask);
+ _modalCount++;
+ HasModal = _modalCount > 0;
control.IsClosed = false;
}
diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs
index 6296a27..0e90afe 100644
--- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs
+++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs
@@ -24,13 +24,28 @@ public partial class OverlayDialogHost: Canvas
{
internal PureRectangle? Mask;
internal OverlayFeedbackElement Element;
+ internal bool Modal;
- public DialogPair(PureRectangle? mask, OverlayFeedbackElement element)
+ public DialogPair(PureRectangle? mask, OverlayFeedbackElement element, bool modal = true)
{
Mask = mask;
Element = element;
+ Modal = modal;
}
}
+
+ private int _modalCount = 0;
+
+
+
+ public static readonly DirectProperty HasModalProperty = AvaloniaProperty.RegisterDirect(
+ nameof(HasModal), o => o.HasModal);
+ private bool _hasModal;
+ public bool HasModal
+ {
+ get => _hasModal;
+ private set => SetAndRaise(HasModalProperty, ref _hasModal, value);
+ }
static OverlayDialogHost()
{