Включить максимизировать, свернуть и восстановить окно в WPF (ручное изменение размера отключено)

Мне нужно включить следующее в моем приложении (приложение C# WPF):

  1. Имеют нормальный размер 1024*768
  2. Пользователь может развернуть приложение
  3. Пользователь может свернуть приложение
  4. Пользователь может восстановить приложение (1024*768)
  5. Пользователь не может вручную изменить размер приложения, перетаскивая его границу.

Там нет никаких ResizeMode выполняет все эти требования. Есть ли способ сделать?

2 ответа

Я наконец нашел относительно приличное решение.

Идея состоит в том, чтобы перевесить OnStateChanged событие окна, отмените ограничения Min/Max и обновите его.

Если окно не развернуто, мы просто применяем обратно ограничения Min/Max

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Maximized)
        {
            MinWidth = 0;
            MinHeight = 0;
            MaxWidth = int.MaxValue;
            MaxHeight = int.MaxValue;

            if (!m_isDuringMaximizing)
            {
                m_isDuringMaximizing = true;
                WindowState = WindowState.Normal;
                WindowState = WindowState.Maximized;
                m_isDuringMaximizing = false;
            }
        }
        else if (!m_isDuringMaximizing)
        {
            MinWidth = 1024;
            MinHeight = 768;
            MaxWidth = 1024;
            MaxHeight = 768;
        }

        base.OnStateChanged(e);
    }

Вы можете прослушать событие Window.SizeChanged, и в вашем обработчике вручную установить Width и Height обратно на 1027 и 768. Он по-прежнему позволяет пользователю перетаскивать края окна для изменения размера, но затем окно возвращается к установленному размеру. Недостатком этого является то, что окно имеет "захват" всякий раз, когда пользователь пытается изменить размер - не самая красивая вещь, которую можно увидеть. Минимизируйте и максимизируйте работу как обычно.

Другие вопросы по тегам