Merge pull request #291 from yangjieshao/main

窗口全屏切换 从退出全屏时肯定变为Normal改成变为进入全屏前的状态(即 也可能进入Maximized状态)
This commit is contained in:
Dong Bin
2024-07-16 22:12:47 +08:00
committed by GitHub
3 changed files with 32 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 112 KiB

View File

@@ -265,6 +265,7 @@ public class ImageViewer: TemplatedControl
if (scale < _sourceMinScale) scale = _sourceMinScale; if (scale < _sourceMinScale) scale = _sourceMinScale;
Scale = scale; Scale = scale;
} }
e.Handled = true;
} }
protected override void OnPointerMoved(PointerEventArgs e) protected override void OnPointerMoved(PointerEventArgs e)

View File

@@ -1,4 +1,4 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Metadata; using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
@@ -26,6 +26,10 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
private IDisposable? _visibilityDisposable; private IDisposable? _visibilityDisposable;
/// <summary>
/// 切换进入全屏前 窗口的状态
/// </summary>
private WindowState? _oldWindowState;
protected override void OnApplyTemplate(TemplateAppliedEventArgs e) protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{ {
_closeButton = e.NameScope.Get<Button>(PART_CloseButton); _closeButton = e.NameScope.Get<Button>(PART_CloseButton);
@@ -36,6 +40,8 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
Button.ClickEvent.AddHandler((o, args) => OnRestore(), _restoreButton); Button.ClickEvent.AddHandler((o, args) => OnRestore(), _restoreButton);
Button.ClickEvent.AddHandler((o, args) => OnMinimize(), _minimizeButton); Button.ClickEvent.AddHandler((o, args) => OnMinimize(), _minimizeButton);
Button.ClickEvent.AddHandler((o, args) => OnToggleFullScreen(), _fullScreenButton); Button.ClickEvent.AddHandler((o, args) => OnToggleFullScreen(), _fullScreenButton);
Window.WindowStateProperty.Changed.AddClassHandler<Window, WindowState>(WindowStateChanged);
if (this.HostWindow is not null && !HostWindow.CanResize) if (this.HostWindow is not null && !HostWindow.CanResize)
{ {
_restoreButton.IsEnabled = false; _restoreButton.IsEnabled = false;
@@ -43,6 +49,29 @@ public class CaptionButtons: Avalonia.Controls.Chrome.CaptionButtons
UpdateVisibility(); UpdateVisibility();
} }
private void WindowStateChanged(Window window, AvaloniaPropertyChangedEventArgs<WindowState> e)
{
if (window != HostWindow) return;
if (e.NewValue.Value == WindowState.FullScreen)
{
_oldWindowState = e.OldValue.Value;
}
}
protected override void OnToggleFullScreen()
{
if (HostWindow != null)
{
if (HostWindow.WindowState != WindowState.FullScreen)
{
HostWindow.WindowState = WindowState.FullScreen;
}
else
{
HostWindow.WindowState = _oldWindowState.HasValue ? _oldWindowState.Value : WindowState.Normal;
}
}
}
public override void Attach(Window hostWindow) public override void Attach(Window hostWindow)
{ {
base.Attach(hostWindow); base.Attach(hostWindow);