Исходя из моего опыта, Window.RestoreBounds
всегда даст вам окончательные "нормальные" размеры вашего окна, а Window.WindowState
всегда даст вам окончательное состояние окна (max, min, normal). Независимо от того, в каком состоянии вы находитесь, вы всегда можете просто сохранить значения RestoreBounds и WindowState и вручную установить размеры / состояние окна.
Вот как я это сделал (и я знаю, что восстановление не чистое, но мне все равно):
private class WindowStatus
{
private WindowState state;
private Rect restoreBounds;
public WindowStatus(Window window)
{
state = window.WindowState;
restoreBounds = window.RestoreBounds;
}
public void Restore(Window window)
{
window.WindowState = state;
window.Height = restoreBounds.Height;
window.Width = restoreBounds.Width;
window.Left = restoreBounds.Left;
window.Top = restoreBounds.Top;
}
}