feat: update button visibility upon root property change.

This commit is contained in:
rabbitism
2024-09-11 19:15:34 +08:00
parent 60605de2c8
commit 13fbe74144

View File

@@ -23,7 +23,11 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
private Button? _minimizeButton; private Button? _minimizeButton;
private Button? _fullScreenButton; private Button? _fullScreenButton;
private IDisposable? _visibilityDisposable; private IDisposable? _windowStateSubscription;
private IDisposable? _fullScreenSubscription;
private IDisposable? _minimizeSubscription;
private IDisposable? _restoreSubscription;
private IDisposable? _closeSubscription;
/// <summary> /// <summary>
/// 切换进入全屏前 窗口的状态 /// 切换进入全屏前 窗口的状态
@@ -74,10 +78,15 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
public override void Attach(Window hostWindow) public override void Attach(Window hostWindow)
{ {
base.Attach(hostWindow); base.Attach(hostWindow);
_visibilityDisposable = HostWindow?.GetObservable(Window.WindowStateProperty).Subscribe((_) => _windowStateSubscription = HostWindow?.GetObservable(Window.WindowStateProperty).Subscribe(_ =>
{ {
UpdateVisibility(); UpdateVisibility();
}); });
Action<bool> 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() private void UpdateVisibility()
@@ -98,6 +107,10 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
public override void Detach() public override void Detach()
{ {
base.Detach(); base.Detach();
_visibilityDisposable?.Dispose(); _windowStateSubscription?.Dispose();
_fullScreenSubscription?.Dispose();
_minimizeSubscription?.Dispose();
_restoreSubscription?.Dispose();
_closeSubscription?.Dispose();
} }
} }