diff --git a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs index 0070581e1d..e22e3aa51a 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.AppWndProc.cs @@ -618,6 +618,9 @@ namespace Avalonia.Win32 SizeCommand.Maximized => WindowState.Maximized, SizeCommand.Minimized => WindowState.Minimized, _ when _isFullScreenActive => WindowState.FullScreen, + // Ignore state changes for unshown windows. We always tell Windows that we are hidden + // until shown, so the OS value should be ignored while we are in the unshown state. + _ when !_shown => _lastWindowState, _ => WindowState.Normal, }; diff --git a/src/Windows/Avalonia.Win32/WindowImpl.cs b/src/Windows/Avalonia.Win32/WindowImpl.cs index 7589f2457e..7a022d1c0d 100644 --- a/src/Windows/Avalonia.Win32/WindowImpl.cs +++ b/src/Windows/Avalonia.Win32/WindowImpl.cs @@ -607,7 +607,7 @@ namespace Avalonia.Win32 windowPlacement.NormalPosition = requestedWindowRect; - windowPlacement.ShowCmd = _lastWindowState switch + windowPlacement.ShowCmd = !_shown ? ShowWindowCommand.Hide : _lastWindowState switch { WindowState.Minimized => ShowWindowCommand.ShowMinNoActive, WindowState.Maximized => ShowWindowCommand.ShowMaximized,