ソースを参照

windowimpl tells window then managed chrome is required.

Dan Walmsley 5 年 前
コミット
28fdb43ae0

+ 2 - 0
src/Avalonia.Controls/Platform/IWindowImpl.cs

@@ -104,6 +104,8 @@ namespace Avalonia.Platform
         void SetExtendClientAreaTitleBarHeightHint(double titleBarHeight);
 
         Action<bool> ExtendClientAreaToDecorationsChanged { get; set; }
+
+        bool NeedsManagedDecorations { get; }
         
         Thickness ExtendedMargins { get; }
 

+ 14 - 22
src/Avalonia.Controls/Window.cs

@@ -211,8 +211,6 @@ namespace Avalonia.Controls
                     {
                         w.PlatformImpl.SetExtendClientAreaChromeHints((ExtendClientAreaChromeHints)e.NewValue);
                     }
-
-                    w.HandleChromeHintsChanged((ExtendClientAreaChromeHints)e.NewValue);
                 });
 
             ExtendClientAreaTitleBarHeightHintProperty.Changed.AddClassHandler<Window>(
@@ -543,6 +541,20 @@ namespace Avalonia.Controls
             WindowDecorationMargins = PlatformImpl.ExtendedMargins;
 
             OffScreenMargin = PlatformImpl.OffScreenMargin;
+
+            if(PlatformImpl.NeedsManagedDecorations)
+            {
+                if (_managedTitleBar == null)
+                {
+                    _managedTitleBar = new TitleBar(this);
+                    _managedTitleBar.Attach();
+                }                
+            }
+            else
+            {
+                _managedTitleBar?.Detach();
+                _managedTitleBar = null;
+            }
         }
 
         /// <summary>
@@ -907,26 +919,6 @@ namespace Avalonia.Controls
             base.HandleResized(clientSize);
         }
 
-        private void HandleChromeHintsChanged (ExtendClientAreaChromeHints hints)
-        {
-            if(hints.HasFlag(ExtendClientAreaChromeHints.ManagedChromeButtons))
-            {
-                if(_managedTitleBar == null)
-                {
-                    _managedTitleBar = new TitleBar(this);
-                }
-
-                _managedTitleBar.Attach();
-            }
-            else
-            {
-                if(_managedTitleBar != null)
-                {
-                    _managedTitleBar.Detach();
-                }
-            }
-        }
-
         /// <summary>
         /// Raises the <see cref="Closing"/> event.
         /// </summary>

+ 3 - 1
src/Windows/Avalonia.Win32/WindowImpl.cs

@@ -1057,7 +1057,9 @@ namespace Avalonia.Win32
 
         public bool IsClientAreaExtendedToDecorations => _isClientAreaExtended;
 
-        public Action<bool> ExtendClientAreaToDecorationsChanged { get; set; }        
+        public Action<bool> ExtendClientAreaToDecorationsChanged { get; set; }
+
+        public bool NeedsManagedDecorations => _isClientAreaExtended && _extendChromeHints.HasFlag(ExtendClientAreaChromeHints.PreferSystemChromeButtons);
 
         public Thickness ExtendedMargins => _extendedMargins;