diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs index e9b86b3bdd..c9c7939c1c 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml.cs +++ b/samples/IntegrationTestApp/MainWindow.axaml.cs @@ -162,7 +162,7 @@ namespace IntegrationTestApp var popup = new Popup { WindowManagerAddShadowHint = false, - PlacementMode = PlacementMode.AnchorAndGravity, + Placement = PlacementMode.AnchorAndGravity, PlacementAnchor = PopupAnchor.Top, PlacementGravity = PopupGravity.Bottom, Width= 200, diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs index 0e7d31967c..f46594ff96 100644 --- a/src/Avalonia.Controls/ContextMenu.cs +++ b/src/Avalonia.Controls/ContextMenu.cs @@ -54,11 +54,17 @@ namespace Avalonia.Controls public static readonly StyledProperty PlacementGravityProperty = Popup.PlacementGravityProperty.AddOwner(); + /// + /// Defines the property. + /// + public static readonly StyledProperty PlacementProperty = + Popup.PlacementProperty.AddOwner(); + /// /// Defines the property. /// - public static readonly StyledProperty PlacementModeProperty = - Popup.PlacementModeProperty.AddOwner(); + [Obsolete("Use the Placement property instead.")] + public static readonly StyledProperty PlacementModeProperty = PlacementProperty; /// /// Defines the property. @@ -108,99 +114,80 @@ namespace Avalonia.Controls static ContextMenu() { ItemsPanelProperty.OverrideDefaultValue(DefaultPanel); - PlacementModeProperty.OverrideDefaultValue(PlacementMode.Pointer); + PlacementProperty.OverrideDefaultValue(PlacementMode.Pointer); ContextMenuProperty.Changed.Subscribe(ContextMenuChanged); AutomationProperties.AccessibilityViewProperty.OverrideDefaultValue(AccessibilityView.Control); AutomationProperties.ControlTypeOverrideProperty.OverrideDefaultValue(AutomationControlType.Menu); } - /// - /// Gets or sets the Horizontal offset of the context menu in relation to the . - /// + /// public double HorizontalOffset { - get { return GetValue(HorizontalOffsetProperty); } - set { SetValue(HorizontalOffsetProperty, value); } + get => GetValue(HorizontalOffsetProperty); + set => SetValue(HorizontalOffsetProperty, value); } - /// - /// Gets or sets the Vertical offset of the context menu in relation to the . - /// + /// public double VerticalOffset { - get { return GetValue(VerticalOffsetProperty); } - set { SetValue(VerticalOffsetProperty, value); } + get => GetValue(VerticalOffsetProperty); + 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); } + get => GetValue(PlacementAnchorProperty); + set => SetValue(PlacementAnchorProperty, value); } - /// - /// Gets or sets a value describing how the context menu position will be adjusted if the - /// unadjusted position would result in the context menu being partly constrained. - /// + /// public PopupPositionerConstraintAdjustment PlacementConstraintAdjustment { - get { return GetValue(PlacementConstraintAdjustmentProperty); } - set { SetValue(PlacementConstraintAdjustmentProperty, value); } + get => GetValue(PlacementConstraintAdjustmentProperty); + set => SetValue(PlacementConstraintAdjustmentProperty, 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); } + get => GetValue(PlacementGravityProperty); + set => SetValue(PlacementGravityProperty, value); } - /// - /// Gets or sets the placement mode of the context menu in relation to the. - /// + /// + [Obsolete("Use the Placement property instead.")] public PlacementMode PlacementMode { - get { return GetValue(PlacementModeProperty); } - set { SetValue(PlacementModeProperty, value); } + get => GetValue(PlacementProperty); + set => SetValue(PlacementProperty, value); + } + + /// + public PlacementMode Placement + { + get => GetValue(PlacementProperty); + set => SetValue(PlacementProperty, value); } public bool WindowManagerAddShadowHint { - get { return GetValue(WindowManagerAddShadowHintProperty); } - set { SetValue(WindowManagerAddShadowHintProperty, value); } + get => GetValue(WindowManagerAddShadowHintProperty); + set => SetValue(WindowManagerAddShadowHintProperty, value); } - /// - /// Gets or sets the the anchor rectangle within the parent that the context menu 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); } + get => GetValue(PlacementRectProperty); + set => SetValue(PlacementRectProperty, value); } - /// - /// Gets or sets the control that is used to determine the popup's position. - /// + /// public Control? PlacementTarget { - get { return GetValue(PlacementTargetProperty); } - set { SetValue(PlacementTargetProperty, value); } + get => GetValue(PlacementTargetProperty); + set => SetValue(PlacementTargetProperty, value); } /// @@ -343,9 +330,9 @@ namespace Avalonia.Controls ((ISetLogicalParent)_popup).SetParent(control); } - _popup.PlacementMode = !requestedByPointer && PlacementMode == PlacementMode.Pointer + _popup.Placement = !requestedByPointer && Placement == PlacementMode.Pointer ? PlacementMode.Bottom - : PlacementMode; + : Placement; //Position of the line below is really important. //All styles are being applied only when control has logical parent. diff --git a/src/Avalonia.Controls/DateTimePickers/DatePicker.cs b/src/Avalonia.Controls/DateTimePickers/DatePicker.cs index 118183102a..f3faef26dd 100644 --- a/src/Avalonia.Controls/DateTimePickers/DatePicker.cs +++ b/src/Avalonia.Controls/DateTimePickers/DatePicker.cs @@ -389,7 +389,7 @@ namespace Avalonia.Controls _presenter.Date = SelectedDate ?? DateTimeOffset.Now; - _popup.PlacementMode = PlacementMode.AnchorAndGravity; + _popup.Placement = PlacementMode.AnchorAndGravity; _popup.PlacementAnchor = Primitives.PopupPositioning.PopupAnchor.Bottom; _popup.PlacementGravity = Primitives.PopupPositioning.PopupGravity.Bottom; _popup.PlacementConstraintAdjustment = Primitives.PopupPositioning.PopupPositionerConstraintAdjustment.SlideY; diff --git a/src/Avalonia.Controls/DateTimePickers/TimePicker.cs b/src/Avalonia.Controls/DateTimePickers/TimePicker.cs index 2f49a44b8c..0046e1de52 100644 --- a/src/Avalonia.Controls/DateTimePickers/TimePicker.cs +++ b/src/Avalonia.Controls/DateTimePickers/TimePicker.cs @@ -255,7 +255,7 @@ namespace Avalonia.Controls _presenter.Time = SelectedTime ?? DateTime.Now.TimeOfDay; - _popup.PlacementMode = PlacementMode.AnchorAndGravity; + _popup.Placement = PlacementMode.AnchorAndGravity; _popup.PlacementAnchor = Primitives.PopupPositioning.PopupAnchor.Bottom; _popup.PlacementGravity = Primitives.PopupPositioning.PopupGravity.Bottom; _popup.PlacementConstraintAdjustment = Primitives.PopupPositioning.PopupPositionerConstraintAdjustment.SlideY; diff --git a/src/Avalonia.Controls/Flyouts/PopupFlyoutBase.cs b/src/Avalonia.Controls/Flyouts/PopupFlyoutBase.cs index 168421c625..9ed4737c7c 100644 --- a/src/Avalonia.Controls/Flyouts/PopupFlyoutBase.cs +++ b/src/Avalonia.Controls/Flyouts/PopupFlyoutBase.cs @@ -14,9 +14,9 @@ namespace Avalonia.Controls.Primitives { public abstract class PopupFlyoutBase : FlyoutBase, IPopupHostProvider { - /// + /// public static readonly StyledProperty PlacementProperty = - Popup.PlacementModeProperty.AddOwner(); + Popup.PlacementProperty.AddOwner(); /// public static readonly StyledProperty HorizontalOffsetProperty = @@ -64,15 +64,13 @@ namespace Avalonia.Controls.Primitives protected Popup Popup => _popupLazy.Value; - /// - /// Gets or sets the desired placement. - /// + /// public PlacementMode Placement { get => GetValue(PlacementProperty); set => SetValue(PlacementProperty, value); } - + /// public PopupGravity PlacementGravity { @@ -423,11 +421,11 @@ namespace Avalonia.Controls.Primitives Popup.PlacementGravity = PlacementGravity; if (showAtPointer) { - Popup.PlacementMode = PlacementMode.Pointer; + Popup.Placement = PlacementMode.Pointer; } else { - Popup.PlacementMode = Placement; + Popup.Placement = Placement; Popup.PlacementConstraintAdjustment = PopupPositioning.PopupPositionerConstraintAdjustment.SlideX | PopupPositioning.PopupPositionerConstraintAdjustment.SlideY; diff --git a/src/Avalonia.Controls/Primitives/Popup.cs b/src/Avalonia.Controls/Primitives/Popup.cs index 0c6c434713..eda794f33a 100644 --- a/src/Avalonia.Controls/Primitives/Popup.cs +++ b/src/Avalonia.Controls/Primitives/Popup.cs @@ -65,11 +65,17 @@ namespace Avalonia.Controls.Primitives public static readonly StyledProperty PlacementGravityProperty = AvaloniaProperty.Register(nameof(PlacementGravity)); + /// + /// Defines the property. + /// + public static readonly StyledProperty PlacementProperty = + AvaloniaProperty.Register(nameof(Placement), defaultValue: PlacementMode.Bottom); + /// /// Defines the property. /// - public static readonly StyledProperty PlacementModeProperty = - AvaloniaProperty.Register(nameof(PlacementMode), defaultValue: PlacementMode.Bottom); + [Obsolete("Use the Placement property instead.")] + public static readonly StyledProperty PlacementModeProperty = PlacementProperty; /// /// Defines the property. @@ -146,8 +152,8 @@ namespace Avalonia.Controls.Primitives public bool WindowManagerAddShadowHint { - get { return GetValue(WindowManagerAddShadowHintProperty); } - set { SetValue(WindowManagerAddShadowHintProperty, value); } + get => GetValue(WindowManagerAddShadowHintProperty); + set => SetValue(WindowManagerAddShadowHintProperty, value); } /// @@ -156,8 +162,8 @@ namespace Avalonia.Controls.Primitives [Content] public Control? Child { - get { return GetValue(ChildProperty); } - set { SetValue(ChildProperty, value); } + get => GetValue(ChildProperty); + set => SetValue(ChildProperty, value); } /// @@ -205,13 +211,13 @@ namespace Avalonia.Controls.Primitives } /// - /// Gets or sets the anchor point on the when + /// Gets or sets the anchor point on the when /// is . /// public PopupAnchor PlacementAnchor { - get { return GetValue(PlacementAnchorProperty); } - set { SetValue(PlacementAnchorProperty, value); } + get => GetValue(PlacementAnchorProperty); + set => SetValue(PlacementAnchorProperty, value); } /// @@ -220,32 +226,40 @@ namespace Avalonia.Controls.Primitives /// public PopupPositionerConstraintAdjustment PlacementConstraintAdjustment { - get { return GetValue(PlacementConstraintAdjustmentProperty); } - set { SetValue(PlacementConstraintAdjustmentProperty, value); } + get => GetValue(PlacementConstraintAdjustmentProperty); + set => SetValue(PlacementConstraintAdjustmentProperty, value); } /// /// Gets or sets a value which defines in what direction the popup should open - /// when is . + /// when is . /// public PopupGravity PlacementGravity { - get { return GetValue(PlacementGravityProperty); } - set { SetValue(PlacementGravityProperty, value); } + get => GetValue(PlacementGravityProperty); + set => SetValue(PlacementGravityProperty, value); + } + + /// + [Obsolete("Use the Placement property instead.")] + public PlacementMode PlacementMode + { + get => GetValue(PlacementProperty); + set => SetValue(PlacementProperty, value); } /// - /// Gets or sets the placement mode of the popup in relation to the . + /// Gets or sets the desired placement of the popup in relation to the . /// - public PlacementMode PlacementMode + public PlacementMode Placement { - get { return GetValue(PlacementModeProperty); } - set { SetValue(PlacementModeProperty, value); } + get => GetValue(PlacementProperty); + set => SetValue(PlacementProperty, value); } /// /// Gets or sets the the anchor rectangle within the parent that the popup will be placed - /// relative to when is . + /// relative to when is . /// /// /// The placement rect defines a rectangle relative to around @@ -256,8 +270,8 @@ namespace Avalonia.Controls.Primitives /// public Rect? PlacementRect { - get { return GetValue(PlacementRectProperty); } - set { SetValue(PlacementRectProperty, value); } + get => GetValue(PlacementRectProperty); + set => SetValue(PlacementRectProperty, value); } /// @@ -266,8 +280,8 @@ namespace Avalonia.Controls.Primitives [ResolveByName] public Control? PlacementTarget { - get { return GetValue(PlacementTargetProperty); } - set { SetValue(PlacementTargetProperty, value); } + get => GetValue(PlacementTargetProperty); + set => SetValue(PlacementTargetProperty, value); } /// @@ -301,8 +315,8 @@ namespace Avalonia.Controls.Primitives /// public double HorizontalOffset { - get { return GetValue(HorizontalOffsetProperty); } - set { SetValue(HorizontalOffsetProperty, value); } + get => GetValue(HorizontalOffsetProperty); + set => SetValue(HorizontalOffsetProperty, value); } /// @@ -310,8 +324,8 @@ namespace Avalonia.Controls.Primitives /// public double VerticalOffset { - get { return GetValue(VerticalOffsetProperty); } - set { SetValue(VerticalOffsetProperty, value); } + get => GetValue(VerticalOffsetProperty); + set => SetValue(VerticalOffsetProperty, value); } /// @@ -319,8 +333,8 @@ namespace Avalonia.Controls.Primitives /// public bool Topmost { - get { return GetValue(TopmostProperty); } - set { SetValue(TopmostProperty, value); } + get => GetValue(TopmostProperty); + set => SetValue(TopmostProperty, value); } IPopupHost? IPopupHostProvider.PopupHost => Host; @@ -404,7 +418,7 @@ namespace Avalonia.Controls.Primitives (x, handler) => x.LostFocus -= handler).DisposeWith(handlerCleanup); // Recalculate popup position on parent moved/resized, but not if placement was on pointer - if (PlacementMode != PlacementMode.Pointer) + if (Placement != PlacementMode.Pointer) { SubscribeToEventHandler>(window.PlatformImpl, WindowPositionChanged, (x, handler) => x.PositionChanged += handler, @@ -534,7 +548,7 @@ namespace Avalonia.Controls.Primitives UpdateHostSizing(_openState.PopupHost, _openState.TopLevel, _openState.PlacementTarget); } else if (change.Property == PlacementTargetProperty || - change.Property == PlacementModeProperty || + change.Property == PlacementProperty || change.Property == HorizontalOffsetProperty || change.Property == VerticalOffsetProperty || change.Property == PlacementAnchorProperty || @@ -567,7 +581,7 @@ namespace Avalonia.Controls.Primitives { popupHost.ConfigurePosition( placementTarget, - PlacementMode, + Placement, new Point(HorizontalOffset, VerticalOffset), PlacementAnchor, PlacementGravity, @@ -615,7 +629,7 @@ namespace Avalonia.Controls.Primitives return; _openState.PopupHost.ConfigurePosition( placementTarget, - PlacementMode, + Placement, new Point(HorizontalOffset, VerticalOffset), PlacementAnchor, PlacementGravity, diff --git a/src/Avalonia.Controls/SplitButton/SplitButton.cs b/src/Avalonia.Controls/SplitButton/SplitButton.cs index e790578675..7f10c632c5 100644 --- a/src/Avalonia.Controls/SplitButton/SplitButton.cs +++ b/src/Avalonia.Controls/SplitButton/SplitButton.cs @@ -172,7 +172,7 @@ namespace Avalonia.Controls flyout.Opened += Flyout_Opened; flyout.Closed += Flyout_Closed; - _flyoutPropertyChangedDisposable = flyout.GetPropertyChangedObservable(Popup.PlacementModeProperty).Subscribe(Flyout_PlacementPropertyChanged); + _flyoutPropertyChangedDisposable = flyout.GetPropertyChangedObservable(Popup.PlacementProperty).Subscribe(Flyout_PlacementPropertyChanged); } } diff --git a/src/Avalonia.Themes.Fluent/Controls/DatePicker.xaml b/src/Avalonia.Themes.Fluent/Controls/DatePicker.xaml index 28ec553660..e71e733eff 100644 --- a/src/Avalonia.Themes.Fluent/Controls/DatePicker.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/DatePicker.xaml @@ -127,7 +127,7 @@ + Placement="Bottom"> diff --git a/src/Avalonia.Themes.Fluent/Controls/Menu.xaml b/src/Avalonia.Themes.Fluent/Controls/Menu.xaml index 039482d70f..c234cfd68e 100644 --- a/src/Avalonia.Themes.Fluent/Controls/Menu.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/Menu.xaml @@ -37,7 +37,7 @@ MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}" IsLightDismissEnabled="True" IsOpen="{TemplateBinding IsSubMenuOpen, Mode=TwoWay}" - PlacementMode="BottomEdgeAlignedLeft" + Placement="BottomEdgeAlignedLeft" OverlayInputPassThroughElement="{Binding $parent[Menu]}"> diff --git a/src/Avalonia.Themes.Fluent/Controls/TimePicker.xaml b/src/Avalonia.Themes.Fluent/Controls/TimePicker.xaml index 71ff0eaebc..39f7b0b224 100644 --- a/src/Avalonia.Themes.Fluent/Controls/TimePicker.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/TimePicker.xaml @@ -151,7 +151,7 @@ WindowManagerAddShadowHint="False" IsLightDismissEnabled="True" PlacementTarget="{TemplateBinding}" - PlacementMode="Bottom"> + Placement="Bottom"> diff --git a/src/Avalonia.Themes.Simple/Controls/DatePicker.xaml b/src/Avalonia.Themes.Simple/Controls/DatePicker.xaml index 5c57240aea..6cf352518a 100644 --- a/src/Avalonia.Themes.Simple/Controls/DatePicker.xaml +++ b/src/Avalonia.Themes.Simple/Controls/DatePicker.xaml @@ -142,7 +142,7 @@ diff --git a/src/Avalonia.Themes.Simple/Controls/Menu.xaml b/src/Avalonia.Themes.Simple/Controls/Menu.xaml index f5e0250058..0b3064412d 100644 --- a/src/Avalonia.Themes.Simple/Controls/Menu.xaml +++ b/src/Avalonia.Themes.Simple/Controls/Menu.xaml @@ -27,7 +27,7 @@ + Placement="Right"> diff --git a/src/Avalonia.Themes.Simple/Controls/TimePicker.xaml b/src/Avalonia.Themes.Simple/Controls/TimePicker.xaml index 58066bb9a5..5acbc41a68 100644 --- a/src/Avalonia.Themes.Simple/Controls/TimePicker.xaml +++ b/src/Avalonia.Themes.Simple/Controls/TimePicker.xaml @@ -156,7 +156,7 @@ diff --git a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs index d99c90cb77..803cc793fd 100644 --- a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs @@ -303,7 +303,7 @@ namespace Avalonia.Controls.UnitTests window.Show(); var c = new ContextMenu(); - c.PlacementMode = PlacementMode.Bottom; + c.Placement = PlacementMode.Bottom; c.Open(button); var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs index 788e6a48bb..fb88c98343 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupRootTests.cs @@ -67,7 +67,7 @@ namespace Avalonia.Controls.UnitTests.Primitives using (UnitTestApplication.Start(TestServices.StyledWindow)) { var window = new Window(); - var target = new Popup {PlacementMode = PlacementMode.Pointer}; + var target = new Popup {Placement = PlacementMode.Pointer}; var child = new Control(); window.Content = target; diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs index 63f99e9535..1e22aa9129 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs @@ -207,7 +207,7 @@ namespace Avalonia.Controls.UnitTests.Primitives { using (CreateServices()) { - var target = new Popup() {PlacementMode = PlacementMode.Pointer}; + var target = new Popup() {Placement = PlacementMode.Pointer}; var root = PreparedWindow(target); target.Open(); @@ -226,7 +226,7 @@ namespace Avalonia.Controls.UnitTests.Primitives using (CreateServices()) { var window = PreparedWindow(); - var target = new Popup() {PlacementMode = PlacementMode.Pointer}; + var target = new Popup() {Placement = PlacementMode.Pointer}; window.Content = target; @@ -249,7 +249,7 @@ namespace Avalonia.Controls.UnitTests.Primitives using (CreateServices()) { var window = PreparedWindow(); - var target = new Popup() {PlacementMode = PlacementMode.Pointer}; + var target = new Popup() {Placement = PlacementMode.Pointer}; window.Content = target; window.ApplyTemplate(); @@ -274,7 +274,7 @@ namespace Avalonia.Controls.UnitTests.Primitives using (CreateServices()) { var window = PreparedWindow(); - var target = new Popup() { PlacementMode = PlacementMode.Pointer }; + var target = new Popup() { Placement = PlacementMode.Pointer }; window.Content = target; window.ApplyTemplate(); @@ -742,7 +742,7 @@ namespace Avalonia.Controls.UnitTests.Primitives { Width = 400, Height = 200, - PlacementMode = PlacementMode.Pointer + Placement = PlacementMode.Pointer }; var window = PreparedWindow(popup); window.Show(); @@ -791,7 +791,7 @@ namespace Avalonia.Controls.UnitTests.Primitives var popup = new Popup() { PlacementTarget = placementTarget, - PlacementMode = PlacementMode.Bottom, + Placement = PlacementMode.Bottom, Width = 10, Height = 10 }; @@ -852,7 +852,7 @@ namespace Avalonia.Controls.UnitTests.Primitives var popup = new Popup() { PlacementTarget = placementTarget, - PlacementMode = PlacementMode.Pointer, + Placement = PlacementMode.Pointer, Width = 10, Height = 10 }; @@ -907,7 +907,7 @@ namespace Avalonia.Controls.UnitTests.Primitives var popup = new Popup() { PlacementTarget = placementTarget, - PlacementMode = PlacementMode.Bottom, + Placement = PlacementMode.Bottom, Width = 10, Height = 10 }; @@ -967,7 +967,7 @@ namespace Avalonia.Controls.UnitTests.Primitives var popup = new Popup() { PlacementTarget = placementTarget, - PlacementMode = PlacementMode.Pointer, + Placement = PlacementMode.Pointer, Width = 10, Height = 10 }; @@ -1020,7 +1020,7 @@ namespace Avalonia.Controls.UnitTests.Primitives Width = 20, Height = 20, PlacementTarget = parentPopup, - PlacementMode = PlacementMode.AnchorAndGravity, + Placement = PlacementMode.AnchorAndGravity, PlacementAnchor = PopupAnchor.TopLeft, PlacementGravity = PopupGravity.BottomRight };