diff --git a/src/Perspex.Controls/PlacementMode.cs b/src/Perspex.Controls/PlacementMode.cs index a0ca30e9ad..ac366a26ec 100644 --- a/src/Perspex.Controls/PlacementMode.cs +++ b/src/Perspex.Controls/PlacementMode.cs @@ -23,6 +23,6 @@ namespace Perspex.Controls /// /// The popup is placed at the top right of its target. /// - Right, + Right } -} +} \ No newline at end of file diff --git a/src/Perspex.Controls/Primitives/Popup.cs b/src/Perspex.Controls/Primitives/Popup.cs index 80a7dfeae4..b0fbca931b 100644 --- a/src/Perspex.Controls/Primitives/Popup.cs +++ b/src/Perspex.Controls/Primitives/Popup.cs @@ -2,13 +2,13 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; +using System.Linq; using Perspex.Input; using Perspex.Interactivity; +using Perspex.LogicalTree; using Perspex.Metadata; using Perspex.Rendering; using Perspex.VisualTree; -using Perspex.LogicalTree; -using System.Linq; namespace Perspex.Controls.Primitives { @@ -270,7 +270,7 @@ namespace Perspex.Controls.Primitives /// Gets the position for the popup based on the placement properties. /// /// The popup's position in screen coordinates. - private Point GetPosition() + protected virtual Point GetPosition() { var zero = default(Point); var target = PlacementTarget ?? this.GetVisualParent(); @@ -279,10 +279,13 @@ namespace Perspex.Controls.Primitives { case PlacementMode.Pointer: return MouseDevice.Instance.Position; + case PlacementMode.Bottom: return target?.PointToScreen(new Point(0, target.Bounds.Height)) ?? zero; + case PlacementMode.Right: return target?.PointToScreen(new Point(target.Bounds.Width, 0)) ?? zero; + default: throw new InvalidOperationException("Invalid value for Popup.PlacementMode"); } @@ -310,4 +313,4 @@ namespace Perspex.Controls.Primitives } } } -} +} \ No newline at end of file