Обработайте сообщение WM_GETMINMAXINFO для своего окна и сделайте все необходимые изменения размера
public MainWindow()
{
InitializeComponent();
SourceInitialized += new EventHandler(win_SourceInitialized);
}
private void win_SourceInitialized(object sender, EventArgs e)
{
System.IntPtr handle = (new WinInterop.WindowInteropHelper(this)).Handle;
WinInterop.HwndSource.FromHwnd(handle).AddHook(new WinInterop.HwndSourceHook(WindowProc));
}
private const int WM_GETMINMAXINFO = 0x0024;
private static System.IntPtr WindowProc(
System.IntPtr hwnd,
int msg,
System.IntPtr wParam,
System.IntPtr lParam,
ref bool handled)
{
switch (msg)
{
case WM_GETMINMAXINFO: //https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-getminmaxinfo
WmGetMinMaxInfo(hwnd, lParam); // <------ Do what you need to here ---------->
handled = true;
break;
}
return (System.IntPtr)0;
}
Обратите внимание, что если у вас окно без рамки, вам также может потребоваться получитьконтролировать информацию (через Win32 GetMonitorInfo) и ограничивать ваше приложение рабочей областью монитора, на котором оно включено.В наших системах окна неправильно определяют размер окна для мониторов 1900x1200 (это делает его слишком высоким, поэтому мы должны установить MaxHeight на основе информации о мониторе и обратить внимание на это, чтобы изменить его, если размер панели задач будет изменен, продолжая наблюдатьсообщения WM_GETMINMAXINFO).
Этот блог, вероятно, может помочь с этим, если у вас также есть эти проблемы:
https://blogs.msdn.microsoft.com/llobo/2006/08/01/maximizing-window-with-windowstylenone-considering-taskbar/