private void MaximizeWindow(bool maximize)
        {
            if (!MaximizeBox || !ControlBox)
            {
                return;
            }

            _maximized = maximize;

            if (maximize)
            {
                var monitorHandle = MonitorFromWindow(Handle, MonitorDefaulttonearest);
                var monitorInfo   = new Monitorinfoex();
                GetMonitorInfo(new HandleRef(null, monitorHandle), monitorInfo);
                _previousSize     = Size;
                _previousLocation = Location;
                Size     = new Size(monitorInfo.rcWork.Width(), monitorInfo.rcWork.Height());
                Location = new Point(monitorInfo.rcWork.left, monitorInfo.rcWork.top);
            }
            else
            {
                Size     = _previousSize;
                Location = _previousLocation;
            }
        }
        /// <summary>
        /// Gets the size of the monitor holding the window
        /// </summary>
        /// <param name="window"></param>
        /// <returns></returns>
        public static Size MonitorSize(Window window)
        {
            // Get handle for nearest monitor to this window
            var wih = new WindowInteropHelper(window);
            var hMonitor = UnsafeNativeMethods.MonitorFromWindow(wih.Handle, 2);

            // Get monitor info
            var monitorInfo = new Monitorinfoex();
            monitorInfo.cbSize = Marshal.SizeOf(monitorInfo);
            UnsafeNativeMethods.GetMonitorInfo(new HandleRef(window, hMonitor), monitorInfo);

            return new Size(monitorInfo.rcMonitor.Right, monitorInfo.rcMonitor.Bottom);
        }
 public static extern bool GetMonitorInfo(HandleRef hmonitor, [In, Out] Monitorinfoex info);