From 13fbe74144b1b5fd2db2e55aae27bca17a66fc49 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 11 Sep 2024 19:15:34 +0800 Subject: [PATCH] feat: update button visibility upon root property change. --- src/Ursa/Controls/TitleBar/CaptionButtons.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Ursa/Controls/TitleBar/CaptionButtons.cs b/src/Ursa/Controls/TitleBar/CaptionButtons.cs index 4356fa9..1ab7f73 100644 --- a/src/Ursa/Controls/TitleBar/CaptionButtons.cs +++ b/src/Ursa/Controls/TitleBar/CaptionButtons.cs @@ -23,7 +23,11 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons private Button? _minimizeButton; private Button? _fullScreenButton; - private IDisposable? _visibilityDisposable; + private IDisposable? _windowStateSubscription; + private IDisposable? _fullScreenSubscription; + private IDisposable? _minimizeSubscription; + private IDisposable? _restoreSubscription; + private IDisposable? _closeSubscription; /// /// 切换进入全屏前 窗口的状态 @@ -74,10 +78,15 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons public override void Attach(Window hostWindow) { base.Attach(hostWindow); - _visibilityDisposable = HostWindow?.GetObservable(Window.WindowStateProperty).Subscribe((_) => + _windowStateSubscription = HostWindow?.GetObservable(Window.WindowStateProperty).Subscribe(_ => { UpdateVisibility(); }); + Action a = (_) => UpdateVisibility(); + _fullScreenSubscription = HostWindow?.GetObservable(UrsaWindow.IsFullScreenButtonVisibleProperty).Subscribe(a); + _minimizeSubscription = HostWindow?.GetObservable(UrsaWindow.IsMinimizeButtonVisibleProperty).Subscribe(a); + _restoreSubscription = HostWindow?.GetObservable(UrsaWindow.IsRestoreButtonVisibleProperty).Subscribe(a); + _closeSubscription = HostWindow?.GetObservable(UrsaWindow.IsCloseButtonVisibleProperty).Subscribe(a); } private void UpdateVisibility() @@ -98,6 +107,10 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons public override void Detach() { base.Detach(); - _visibilityDisposable?.Dispose(); + _windowStateSubscription?.Dispose(); + _fullScreenSubscription?.Dispose(); + _minimizeSubscription?.Dispose(); + _restoreSubscription?.Dispose(); + _closeSubscription?.Dispose(); } } \ No newline at end of file