Browse Source

Added WindowManagerAddShadowHint to PopupRoot. (#15238)

Steven Kirk 1 year ago
parent
commit
7431e160a8

+ 5 - 2
src/Avalonia.Controls/Primitives/Popup.cs

@@ -150,6 +150,9 @@ namespace Avalonia.Controls.Primitives
 
         public IPopupHost? Host => _openState?.PopupHost;
 
+        /// <summary>
+        /// Gets or sets a hint to the window manager that a shadow should be added to the popup.
+        /// </summary>
         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;
             }
         }
 

+ 26 - 0
src/Avalonia.Controls/Primitives/PopupRoot.cs

@@ -20,6 +20,12 @@ namespace Avalonia.Controls.Primitives
         public static readonly StyledProperty<Transform?> TransformProperty =
             AvaloniaProperty.Register<PopupRoot, Transform?>(nameof(Transform));
 
+        /// <summary>
+        /// Defines the <see cref="WindowManagerAddShadowHint"/> property.
+        /// </summary>
+        public static readonly StyledProperty<bool> WindowManagerAddShadowHintProperty =
+            Popup.WindowManagerAddShadowHintProperty.AddOwner<PopupRoot>();
+
         private PopupPositionerParameters _positionerParameters;        
 
         /// <summary>
@@ -50,6 +56,7 @@ namespace Avalonia.Controls.Primitives
             : base(impl, dependencyResolver)
         {
             ParentTopLevel = parent;
+            impl.SetWindowManagerAddShadowHint(WindowManagerAddShadowHint);
         }
 
         /// <summary>
@@ -66,6 +73,15 @@ namespace Avalonia.Controls.Primitives
             set => SetValue(TransformProperty, value);
         }
 
+        /// <summary>
+        /// Gets or sets a hint to the window manager that a shadow should be added to the popup.
+        /// </summary>
+        public bool WindowManagerAddShadowHint
+        {
+            get => GetValue(WindowManagerAddShadowHintProperty);
+            set => SetValue(WindowManagerAddShadowHintProperty, value);
+        }
+
         /// <summary>
         /// Gets the parent control in the event route.
         /// </summary>
@@ -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<bool>());
+            }
+        }
     }
 }

+ 1 - 1
src/Avalonia.Controls/ToolTip.cs

@@ -304,7 +304,7 @@ namespace Avalonia.Controls
         {
             if (host is PopupRoot pr)
             {
-                pr.PlatformImpl?.SetWindowManagerAddShadowHint(hint);
+                pr.WindowManagerAddShadowHint = hint;
             }
         }