При уменьшении окна, окно уменьшается, но сразу возвращается к прежним размерам

using NetMQ;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows;
using System;

namespace anongram
{
    public partial class MainWindow : Window
    {
        private bool isMaximized = false;
        private double previousWidthBeforeMaximize;
        private double previousHeightBeforeMaximize;
        private double previousLeftBeforeMaximize;
        private double previousTopBeforeMaximize;
        private double originalWidth;
        private double originalHeight;
        private double originalLeft;
        private double originalTop;

        public MainWindow()
        {
            InitializeComponent();

            // Добавляем обработчик события изменения размеров окна
            SizeChanged += MainWindow_SizeChanged;

            // Добавляем обработчик события изменения параметров системы (включая панель задач)
            SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;

            // Добавляем обработчик события Loaded
            originalWidth = Width;
            originalHeight = Height;
            originalLeft = Left;
            originalTop = Top;
        }
        private void MaximizeWindow(object sender, MouseButtonEventArgs e)
        {
            if (isMaximized)
            {
                // Сужаем окно до изначальных размеров и расположения
                Width = originalWidth;
                Height = originalHeight;
                Left = originalLeft;
                Top = originalTop;

                isMaximized = false;
            }
            else
            {
                // Сохраняем текущие размеры и расположение окна
                previousWidthBeforeMaximize = Width;
                previousHeightBeforeMaximize = Height;
                previousLeftBeforeMaximize = Left;
                previousTopBeforeMaximize = Top;

                // Получаем размеры панели задач
                double taskbarHeight = SystemParameters.PrimaryScreenHeight - SystemParameters.WorkArea.Height;

                // Вычисляем новые размеры окна
                double newWidth = SystemParameters.WorkArea.Width;
                double newHeight = SystemParameters.WorkArea.Height;

                // Устанавливаем новые размеры и расположение окна
                Width = newWidth;
                Height = newHeight;
                Left = (SystemParameters.WorkArea.Width - newWidth) / 2 + SystemParameters.WorkArea.Left;
                Top = (SystemParameters.WorkArea.Height - newHeight) / 2 + SystemParameters.WorkArea.Top;

                isMaximized = true;
            }
        }
        private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (isMaximized)
            {
                // Сохраняем текущие размеры и расположение окна
                previousWidthBeforeMaximize = Width;
                previousHeightBeforeMaximize = Height;
                previousLeftBeforeMaximize = Left;
                previousTopBeforeMaximize = Top;

                // Получаем размеры панели задач
                double taskbarHeight = SystemParameters.PrimaryScreenHeight - SystemParameters.WorkArea.Height;

                // Вычисляем новые размеры окна
                double newWidth = SystemParameters.WorkArea.Width;
                double newHeight = SystemParameters.WorkArea.Height;

                // Устанавливаем новые размеры и расположение окна
                Width = newWidth;
                Height = newHeight;
                Left = (SystemParameters.WorkArea.Width - newWidth) / 2 + SystemParameters.WorkArea.Left;
                Top = (SystemParameters.WorkArea.Height - newHeight) / 2 + SystemParameters.WorkArea.Top;

            }
            else if (WindowState == WindowState.Maximized && isMaximized)
            {
                // Окно было расширено, а затем пытались сузить его
                isMaximized = false;
            }
        }

        private void SystemParameters_StaticPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            // Проверяем, было ли изменение в параметрах, связанных с панелью задач
            if (e.PropertyName == "WorkArea" && isMaximized)
            {
                // Вызываем метод MainWindow_SizeChanged для корректной настройки размеров окна
                MainWindow_SizeChanged(null, null);
            }
        }
    }
}

При нажатии первый раз на кнопку, окно расширяется, но когда нажимаю второй раз, окно уменьшается, но сразу возвращается к прежнему расширенному размеру.


Ответы (0 шт):