diff --git a/src/Avalonia.Controls/Primitives/Popup.cs b/src/Avalonia.Controls/Primitives/Popup.cs index 08ef39947c..ef81d24d06 100644 --- a/src/Avalonia.Controls/Primitives/Popup.cs +++ b/src/Avalonia.Controls/Primitives/Popup.cs @@ -150,6 +150,9 @@ namespace Avalonia.Controls.Primitives public IPopupHost? Host => _openState?.PopupHost; + /// + /// Gets or sets a hint to the window manager that a shadow should be added to the popup. + /// public bool WindowManagerAddShadowHint { get => GetValue(WindowManagerAddShadowHintProperty); @@ -653,9 +656,9 @@ namespace Avalonia.Controls.Primitives private static void WindowManagerAddShadowHintChanged(IPopupHost host, bool hint) { - if(host is PopupRoot pr && pr.PlatformImpl is not null) + if (host is PopupRoot pr) { - pr.PlatformImpl.SetWindowManagerAddShadowHint(hint); + pr.WindowManagerAddShadowHint = hint; } } diff --git a/src/Avalonia.Controls/Primitives/PopupRoot.cs b/src/Avalonia.Controls/Primitives/PopupRoot.cs index b41addf855..723bdca1b2 100644 --- a/src/Avalonia.Controls/Primitives/PopupRoot.cs +++ b/src/Avalonia.Controls/Primitives/PopupRoot.cs @@ -20,6 +20,12 @@ namespace Avalonia.Controls.Primitives public static readonly StyledProperty TransformProperty = AvaloniaProperty.Register(nameof(Transform)); + /// + /// Defines the property. + /// + public static readonly StyledProperty WindowManagerAddShadowHintProperty = + Popup.WindowManagerAddShadowHintProperty.AddOwner(); + private PopupPositionerParameters _positionerParameters; /// @@ -50,6 +56,7 @@ namespace Avalonia.Controls.Primitives : base(impl, dependencyResolver) { ParentTopLevel = parent; + impl.SetWindowManagerAddShadowHint(WindowManagerAddShadowHint); } /// @@ -66,6 +73,15 @@ namespace Avalonia.Controls.Primitives set => SetValue(TransformProperty, value); } + /// + /// Gets or sets a hint to the window manager that a shadow should be added to the popup. + /// + public bool WindowManagerAddShadowHint + { + get => GetValue(WindowManagerAddShadowHintProperty); + set => SetValue(WindowManagerAddShadowHintProperty, value); + } + /// /// Gets the parent control in the event route. /// @@ -179,5 +195,15 @@ namespace Avalonia.Controls.Primitives { return new PopupRootAutomationPeer(this); } + + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + base.OnPropertyChanged(change); + + if (change.Property == WindowManagerAddShadowHintProperty) + { + PlatformImpl?.SetWindowManagerAddShadowHint(change.GetNewValue()); + } + } } } diff --git a/src/Avalonia.Controls/ToolTip.cs b/src/Avalonia.Controls/ToolTip.cs index 8e0ca62131..7f9a155ea5 100644 --- a/src/Avalonia.Controls/ToolTip.cs +++ b/src/Avalonia.Controls/ToolTip.cs @@ -304,7 +304,7 @@ namespace Avalonia.Controls { if (host is PopupRoot pr) { - pr.PlatformImpl?.SetWindowManagerAddShadowHint(hint); + pr.WindowManagerAddShadowHint = hint; } }