From 85d464709e7da219e92be1fd286db39724d70d74 Mon Sep 17 00:00:00 2001 From: RMBGAME Date: Tue, 2 Nov 2021 15:36:51 +0800 Subject: [PATCH] Fix Window Size --- .../AvaloniaWin32WindowingPlatformImpl.cs | 5 +++++ .../UI/Views/Windows/WindowBase/FluentWindow.cs | 16 +++++++++++++--- .../UI/Views/Windows/WindowBase/ICoreWindow.cs | 3 +++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaWin32WindowingPlatformImpl.cs b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaWin32WindowingPlatformImpl.cs index 93d3cc8e7..c98b8ecea 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaWin32WindowingPlatformImpl.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/Services/Implementation/AvaloniaWin32WindowingPlatformImpl.cs @@ -127,6 +127,11 @@ namespace System.Application.Services.Implementation newSize.right -= 8; newSize.bottom -= 8; + //if (_owner.IsNewSizeWindow) + //{ + // _owner.Resized(new Size(ncParams.rgrc[1].Width, ncParams.rgrc[1].Height), PlatformResizeReason.Layout); + //} + _owner.IsNewSizeWindow = true; } diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/FluentWindow.cs b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/FluentWindow.cs index 91b96c9cd..2a25bf9f6 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/FluentWindow.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/FluentWindow.cs @@ -124,7 +124,7 @@ namespace Avalonia.Controls vm.SizePosition.Y = e.Point.Y; } } - + bool _isFirstOpenWindow = true; protected virtual void FluentWindow_Opened(object? sender, EventArgs e) { if (DataContext is WindowViewModel vm) @@ -166,17 +166,22 @@ namespace Avalonia.Controls vm.SizePosition.Width = x.Width; vm.SizePosition.Height = x.Height; }); + this.GetObservable(WindowStateProperty) .Subscribe(x => { - if (x == WindowState.Normal) + if (!_isFirstOpenWindow) { - HandleResized(new Size(Width + (IsNewSizeWindow ? 32 : 0), Height + (IsNewSizeWindow ? 16 : 0)), PlatformResizeReason.Application); + if (x == WindowState.Normal) + { + HandleResized(new Size(Width + (IsNewSizeWindow ? 32 : 0), Height + (IsNewSizeWindow ? 16 : 0)), PlatformResizeReason.Application); + } } }); } } + _isFirstOpenWindow = false; IsHideWindow = false; } @@ -207,6 +212,11 @@ namespace Avalonia.Controls #region CoreWindow + public void Resized(Size clientSize, PlatformResizeReason reason) + { + HandleResized(clientSize, reason); + } + Window ICoreWindow.Window => this; MinMaxCloseControl? ICoreWindow.SystemCaptionButtons => _systemCaptionButtons; diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/ICoreWindow.cs b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/ICoreWindow.cs index 1505e3a62..753aeafdc 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/ICoreWindow.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Windows/WindowBase/ICoreWindow.cs @@ -1,5 +1,6 @@ using Avalonia.Input; using Avalonia.Layout; +using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Styling; using Avalonia.VisualTree; @@ -24,6 +25,8 @@ namespace Avalonia.Controls MinMaxCloseControl? SystemCaptionButtons { get; } + public void Resized(Size clientSize, PlatformResizeReason reason); + bool HitTestTitleBarRegion(APoint windowPoint) { return SystemCaptionButtons?.HitTestCustom(windowPoint) ?? false;