Включить максимизировать, свернуть и восстановить окно в WPF (ручное изменение размера отключено)
Мне нужно включить следующее в моем приложении (приложение C# WPF):
- Имеют нормальный размер 1024*768
- Пользователь может развернуть приложение
- Пользователь может свернуть приложение
- Пользователь может восстановить приложение (1024*768)
- Пользователь не может вручную изменить размер приложения, перетаскивая его границу.
Там нет никаких 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. Он по-прежнему позволяет пользователю перетаскивать края окна для изменения размера, но затем окно возвращается к установленному размеру. Недостатком этого является то, что окно имеет "захват" всякий раз, когда пользователь пытается изменить размер - не самая красивая вещь, которую можно увидеть. Минимизируйте и максимизируйте работу как обычно.