From 3caada808fc3cb200d587e08fb1476a1986cc769 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Sat, 19 Jun 2021 03:01:55 -0400 Subject: [PATCH] Refresh PlacementMode on context menu opened --- src/Avalonia.Controls/ContextMenu.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs index c9ffa4fcc1..ead5b0d9f3 100644 --- a/src/Avalonia.Controls/ContextMenu.cs +++ b/src/Avalonia.Controls/ContextMenu.cs @@ -274,7 +274,7 @@ namespace Avalonia.Controls } control ??= _attachedControls![0]; - Open(control, PlacementTarget ?? control); + Open(control, PlacementTarget ?? control, false); } /// @@ -309,7 +309,7 @@ namespace Avalonia.Controls return new MenuItemContainerGenerator(this); } - private void Open(Control control, Control placementTarget) + private void Open(Control control, Control placementTarget, bool requestedByPointer) { if (IsOpen) { @@ -344,6 +344,10 @@ namespace Avalonia.Controls ((ISetLogicalParent)_popup).SetParent(control); } + _popup.PlacementMode = !requestedByPointer && PlacementMode == PlacementMode.Pointer + ? PlacementMode.Bottom + : PlacementMode; + _popup.PlacementTarget = placementTarget; _popup.Child = this; IsOpen = true; @@ -417,7 +421,8 @@ namespace Avalonia.Controls && !e.Handled && !contextMenu.CancelOpening()) { - contextMenu.Open(control, e.Source as Control ?? control); + var requestedByPointer = e.TryGetPosition(null, out _); + contextMenu.Open(control, e.Source as Control ?? control, requestedByPointer); e.Handled = true; } }