diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs index ed38489..5fc4741 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Dialog.cs @@ -119,6 +119,7 @@ public partial class OverlayDialogHost control.RemoveHandler(OverlayFeedbackElement.ClosedEvent, OnDialogControlClosing); control.RemoveHandler(DialogControlBase.LayerChangedEvent, OnDialogLayerChanged); + control.RemoveHandler(PointerPressedEvent, DragMaskToMoveWindow); Children.Remove(control); diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs index c8da503..15e0cd6 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Drawer.cs @@ -166,6 +166,7 @@ public partial class OverlayDialogHost _modalCount--; IsInModalStatus = _modalCount > 0; layer.Mask.RemoveHandler(PointerPressedEvent, ClickMaskToCloseDialog); + layer.Mask.RemoveHandler(PointerReleasedEvent, DragMaskToMoveWindow); if (!IsAnimationDisabled) { var disappearAnimation = CreateAnimation(control.Bounds.Size, control.Position, false); diff --git a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs index 8b09769..63db16d 100644 --- a/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs +++ b/src/Ursa/Controls/OverlayShared/OverlayDialogHost.Shared.cs @@ -114,9 +114,29 @@ public partial class OverlayDialogHost: Canvas { rec.AddHandler(PointerReleasedEvent, ClickMaskToCloseDialog); } + else + { + rec.AddHandler(PointerPressedEvent, DragMaskToMoveWindow); + } return rec; } - + + private void DragMaskToMoveWindow(object? sender, PointerPressedEventArgs e) + { + if (!e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) + { + return; + } + if (sender is PureRectangle mask) + { + var window = this.GetVisualAncestors().OfType().FirstOrDefault(); + if(window is not null) + { + window.BeginMoveDrag(e); + } + } + } + private void ClickMaskToCloseDialog(object? sender, PointerReleasedEventArgs e) { if (sender is PureRectangle border) @@ -126,6 +146,7 @@ public partial class OverlayDialogHost: Canvas { layer.Element.Close(); border.RemoveHandler(PointerReleasedEvent, ClickMaskToCloseDialog); + border.RemoveHandler(PointerPressedEvent, DragMaskToMoveWindow); } } }