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