From 9f8d9ed1cb523010d0b0c1f085a528275521440e Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 25 Mar 2016 18:45:22 +0100 Subject: [PATCH] Use pointer position in Popup if can't find target. If a rooted placement target could not be found, use the current pointer position as the position of the popup. --- src/Perspex.Controls/Primitives/Popup.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Perspex.Controls/Primitives/Popup.cs b/src/Perspex.Controls/Primitives/Popup.cs index e253d81912..3b16b349c2 100644 --- a/src/Perspex.Controls/Primitives/Popup.cs +++ b/src/Perspex.Controls/Primitives/Popup.cs @@ -276,12 +276,18 @@ namespace Perspex.Controls.Primitives protected virtual Point GetPosition() { var zero = default(Point); + var mode = PlacementMode; var target = PlacementTarget ?? this.GetVisualParent(); - switch (PlacementMode) + if (target?.GetVisualRoot() == null) + { + mode = PlacementMode.Pointer; + } + + switch (mode) { case PlacementMode.Pointer: - return MouseDevice.Instance.Position; + return MouseDevice.Instance?.Position ?? default(Point); case PlacementMode.Bottom: return target?.PointToScreen(new Point(0, target.Bounds.Height)) ?? zero;