diff --git a/samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml b/samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml index f2513da8ec..cea8e4b94e 100644 --- a/samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml +++ b/samples/ControlCatalog/Pages/WindowCustomizationsPage.xaml @@ -8,6 +8,7 @@ + None diff --git a/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs b/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs index 80231a4c15..b3ea25e470 100644 --- a/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs +++ b/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs @@ -65,7 +65,7 @@ namespace ControlCatalog.ViewModels WindowState.FullScreen, }; - this.WhenAnyValue(x => x.SystemChromeButtonsEnabled, x => x.SystemTitleBarEnabled) + this.WhenAnyValue(x => x.SystemChromeButtonsEnabled, x=>x.ManagedChromeButtonsEnabled, x => x.SystemTitleBarEnabled) .Subscribe(x => { ChromeHints = ExtendClientAreaChromeHints.NoChrome; @@ -76,6 +76,11 @@ namespace ControlCatalog.ViewModels } if(x.Item2) + { + ChromeHints |= ExtendClientAreaChromeHints.ManagedChromeButtons; + } + + if(x.Item3) { ChromeHints |= ExtendClientAreaChromeHints.SystemTitleBar; } @@ -127,6 +132,15 @@ namespace ControlCatalog.ViewModels set { this.RaiseAndSetIfChanged(ref _systemChromeButtonsEnabled, value); } } + private bool _managedChromeButtonsEnabled; + + public bool ManagedChromeButtonsEnabled + { + get { return _managedChromeButtonsEnabled; } + set { this.RaiseAndSetIfChanged(ref _managedChromeButtonsEnabled, value); } + } + + private double _titleBarHeight; public double TitleBarHeight diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 12b61fce23..8d66e03f98 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Linq; using System.Reactive.Linq; using System.Threading.Tasks; +using Avalonia.Controls.Chrome; using Avalonia.Controls.Platform; using Avalonia.Data; using Avalonia.Input; @@ -69,7 +70,8 @@ namespace Avalonia.Controls /// public class Window : WindowBase, IStyleable, IFocusScope, ILayoutRoot { - private readonly List<(Window child, bool isDialog)> _children = new List<(Window, bool)>(); + private readonly List<(Window child, bool isDialog)> _children = new List<(Window, bool)>(); + private CaptionButtons _managedCaptions; private bool _isExtendedIntoWindowDecorations; @@ -203,7 +205,15 @@ namespace Avalonia.Controls (w, e) => { if (w.PlatformImpl != null) w.PlatformImpl.SetExtendClientAreaToDecorationsHint((bool)e.NewValue); }); ExtendClientAreaChromeHintsProperty.Changed.AddClassHandler( - (w, e) => { if (w.PlatformImpl != null) w.PlatformImpl.SetExtendClientAreaChromeHints((ExtendClientAreaChromeHints)e.NewValue); }); + (w, e) => + { + if (w.PlatformImpl != null) + { + w.PlatformImpl.SetExtendClientAreaChromeHints((ExtendClientAreaChromeHints)e.NewValue); + } + + w.HandleChromeHintsChanged((ExtendClientAreaChromeHints)e.NewValue); + }); ExtendClientAreaTitleBarHeightHintProperty.Changed.AddClassHandler( (w, e) => { if (w.PlatformImpl != null) w.PlatformImpl.SetExtendClientAreaTitleBarHeightHint((double)e.NewValue); }); @@ -897,6 +907,26 @@ namespace Avalonia.Controls base.HandleResized(clientSize); } + private void HandleChromeHintsChanged (ExtendClientAreaChromeHints hints) + { + if(hints.HasFlag(ExtendClientAreaChromeHints.ManagedChromeButtons)) + { + if(_managedCaptions == null) + { + _managedCaptions = new CaptionButtons(this); + } + + _managedCaptions.Attach(); + } + else + { + if(_managedCaptions != null) + { + _managedCaptions.Detach(); + } + } + } + /// /// Raises the event. ///