При уменьшении окна, окно уменьшается, но сразу возвращается к прежним размерам
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);
}
}
}
}
При нажатии первый раз на кнопку, окно расширяется, но когда нажимаю второй раз, окно уменьшается, но сразу возвращается к прежнему расширенному размеру.