Enable Maximize, Minimize and Restore Window in WPF (Manual Resize is disable)

Nir picture Nir · Feb 1, 2010 · Viewed 14.2k times · Source

I need to enable the following on my application (C# WPF application):

  1. Have normal size of 1024*768
  2. The user can maximize the application
  3. The user can minimize the application
  4. The user can restore the application (1024*768)
  5. The user cannot manually resize the application by draging its border.

There isn't any ResizeMode the fulfills all of those requirements. Is there any way to do do?

Answer

Nir picture Nir · Feb 7, 2010

I've finally found a relatively decent solution.

The idea is to overide the OnStateChanged event of the window, cancel the Min/Max constraints and refresh it.

If the window is not maximized, we simply apply back the Min/Max constraints

    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);
    }