diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs index b3dabd8ab9..7bfe283d40 100644 --- a/src/Avalonia.Controls/ContextMenu.cs +++ b/src/Avalonia.Controls/ContextMenu.cs @@ -265,7 +265,7 @@ namespace Avalonia.Controls } control ??= _attachedControls![0]; - Open(control, PlacementTarget ?? control, false); + Open(control, PlacementTarget ?? control, Placement); } /// @@ -303,7 +303,7 @@ namespace Avalonia.Controls remove => _popupHostChangedHandler -= value; } - private void Open(Control control, Control placementTarget, bool requestedByPointer) + private void Open(Control control, Control placementTarget, PlacementMode placement) { if (IsOpen) { @@ -330,9 +330,7 @@ namespace Avalonia.Controls ((ISetLogicalParent)_popup).SetParent(control); } - _popup.Placement = !requestedByPointer && Placement == PlacementMode.Pointer - ? PlacementMode.Bottom - : Placement; + _popup.Placement = placement; //Position of the line below is really important. //All styles are being applied only when control has logical parent. @@ -420,7 +418,10 @@ namespace Avalonia.Controls && !contextMenu.CancelOpening()) { var requestedByPointer = e.TryGetPosition(null, out _); - contextMenu.Open(control, e.Source as Control ?? control, requestedByPointer); + contextMenu.Open( + control, + e.Source as Control ?? control, + requestedByPointer ? contextMenu.Placement : PlacementMode.Bottom); e.Handled = true; } }