diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs
index 5a60fd37af..286cb6d6d8 100644
--- a/src/Avalonia.Controls/ContextMenu.cs
+++ b/src/Avalonia.Controls/ContextMenu.cs
@@ -4,6 +4,7 @@ using System.ComponentModel;
using Avalonia.Controls.Generators;
using Avalonia.Controls.Platform;
using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Primitives.PopupPositioning;
using Avalonia.Controls.Templates;
using Avalonia.Input;
using Avalonia.Interactivity;
@@ -19,11 +20,6 @@ namespace Avalonia.Controls
///
public class ContextMenu : MenuBase, ISetterValue
{
- ///
- /// Defines the property.
- ///
- public static readonly StyledProperty PlacementModeProperty =
- Popup.PlacementModeProperty.AddOwner();
///
/// Defines the property.
@@ -37,6 +33,30 @@ namespace Avalonia.Controls
public static readonly StyledProperty VerticalOffsetProperty =
Popup.VerticalOffsetProperty.AddOwner();
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty PlacementAnchorProperty =
+ Popup.PlacementAnchorProperty.AddOwner();
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty PlacementGravityProperty =
+ Popup.PlacementGravityProperty.AddOwner();
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty PlacementModeProperty =
+ Popup.PlacementModeProperty.AddOwner();
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty PlacementRectProperty =
+ AvaloniaProperty.Register(nameof(PlacementRect));
+
///
/// Defines the property.
///
@@ -77,16 +97,7 @@ namespace Avalonia.Controls
}
///
- /// Gets or sets the placement mode of the popup in relation to the .
- ///
- public PlacementMode PlacementMode
- {
- get { return GetValue(PlacementModeProperty); }
- set { SetValue(PlacementModeProperty, value); }
- }
-
- ///
- /// Gets or sets the Horizontal offset of the popup in relation to the
+ /// Gets or sets the Horizontal offset of the context menu in relation to the .
///
public double HorizontalOffset
{
@@ -95,7 +106,7 @@ namespace Avalonia.Controls
}
///
- /// Gets or sets the Vertical offset of the popup in relation to the
+ /// Gets or sets the Vertical offset of the popup in relation to the .
///
public double VerticalOffset
{
@@ -103,6 +114,52 @@ namespace Avalonia.Controls
set { SetValue(VerticalOffsetProperty, value); }
}
+ ///
+ /// Gets or sets the anchor point on the when
+ /// is .
+ ///
+ public PopupAnchor PlacementAnchor
+ {
+ get { return GetValue(PlacementAnchorProperty); }
+ set { SetValue(PlacementAnchorProperty, value); }
+ }
+
+ ///
+ /// Gets or sets a value which defines in what direction the context menu should open
+ /// when is .
+ ///
+ public PopupGravity PlacementGravity
+ {
+ get { return GetValue(PlacementGravityProperty); }
+ set { SetValue(PlacementGravityProperty, value); }
+ }
+
+ ///
+ /// Gets or sets the placement mode of the context menu in relation to the.
+ ///
+ public PlacementMode PlacementMode
+ {
+ get { return GetValue(PlacementModeProperty); }
+ set { SetValue(PlacementModeProperty, value); }
+ }
+
+ ///
+ /// Gets or sets the the anchor rectangle within the parent that the popup will be placed
+ /// relative to when is .
+ ///
+ ///
+ /// The placement rect defines a rectangle relative to around
+ /// which the popup will be opened, with determining which edge
+ /// of the placement target is used.
+ ///
+ /// If unset, the anchor rectangle will be the bounds of the .
+ ///
+ public Rect? PlacementRect
+ {
+ get { return GetValue(PlacementRectProperty); }
+ set { SetValue(PlacementRectProperty, value); }
+ }
+
///
/// Gets or sets the control that is used to determine the popup's position.
///
@@ -187,7 +244,10 @@ namespace Avalonia.Controls
{
HorizontalOffset = HorizontalOffset,
VerticalOffset = VerticalOffset,
+ PlacementAnchor = PlacementAnchor,
+ PlacementGravity = PlacementGravity,
PlacementMode = PlacementMode,
+ PlacementRect = PlacementRect,
PlacementTarget = PlacementTarget ?? control,
StaysOpen = false
};