Browse Source

Refresh PlacementMode on context menu opened

pull/6059/head
Max Katz 5 years ago
parent
commit
3caada808f
  1. 11
      src/Avalonia.Controls/ContextMenu.cs

11
src/Avalonia.Controls/ContextMenu.cs

@ -274,7 +274,7 @@ namespace Avalonia.Controls
} }
control ??= _attachedControls![0]; control ??= _attachedControls![0];
Open(control, PlacementTarget ?? control); Open(control, PlacementTarget ?? control, false);
} }
/// <summary> /// <summary>
@ -309,7 +309,7 @@ namespace Avalonia.Controls
return new MenuItemContainerGenerator(this); return new MenuItemContainerGenerator(this);
} }
private void Open(Control control, Control placementTarget) private void Open(Control control, Control placementTarget, bool requestedByPointer)
{ {
if (IsOpen) if (IsOpen)
{ {
@ -344,6 +344,10 @@ namespace Avalonia.Controls
((ISetLogicalParent)_popup).SetParent(control); ((ISetLogicalParent)_popup).SetParent(control);
} }
_popup.PlacementMode = !requestedByPointer && PlacementMode == PlacementMode.Pointer
? PlacementMode.Bottom
: PlacementMode;
_popup.PlacementTarget = placementTarget; _popup.PlacementTarget = placementTarget;
_popup.Child = this; _popup.Child = this;
IsOpen = true; IsOpen = true;
@ -417,7 +421,8 @@ namespace Avalonia.Controls
&& !e.Handled && !e.Handled
&& !contextMenu.CancelOpening()) && !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; e.Handled = true;
} }
} }

Loading…
Cancel
Save