Я создаю окно с WindowStyle="None" AllowTransparency="True" . Поэтому я пытаюсь создать полностью собственное окно. Я пытался заставить работать с ним функции Windows, такие как панель макета, изменение анимированного состояния.
Я нашел этот ответ:
Код: Выделить всё
public void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.WindowState == WindowState.Maximized)
{
this.BorderThickness = new System.Windows.Thickness(8);
}
else
{
this.BorderThickness = new System.Windows.Thickness(0);
}
}
Также я нашел этот ответ:
Код: Выделить всё
IntPtr myStyle = new IntPtr(WS.WS_CAPTION | WS.WS_CLIPCHILDREN | WS.WS_MINIMIZEBOX | WS.WS_SYSMENU | WS.WS_SIZEBOX | WS.WS_MAXIMIZEBOX); // ADD "| WS.WS_MAXIMIZEBOX " to enable snap bar
SetWindowLongPtr(new HandleRef(null, handle), GWL_STYLE, myStyle);
Код: Выделить всё
private void WindowLoaded(object sender, RoutedEventArgs e)
{
handle = new WindowInteropHelper(window).Handle;
HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(WindowProc));
IntPtr myStyle = new IntPtr(WS.WS_CAPTION | WS.WS_CLIPCHILDREN | WS.WS_MINIMIZEBOX | WS.WS_SYSMENU | WS.WS_SIZEBOX | WS.WS_MAXIMIZEBOX); // ADD "| WS.WS_MAXIMIZEBOX " to enable snap bar
SetWindowLongPtr(new HandleRef(null, handle), GWL_STYLE, myStyle);
}
private static IntPtr WindowProc(
System.IntPtr hwnd,
int msg,
System.IntPtr wParam,
System.IntPtr lParam,
ref bool handled)
{
switch (msg)
{
case 0x0024:/* WM_GETMINMAXINFO */
WmGetMinMaxInfo(hwnd, lParam);
handled = true;
break;
}
return (IntPtr)0;
}
public static void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam)
{
MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));
int MONITOR_DEFAULTTONEAREST = 0x00000002;
IntPtr monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
if (monitor != IntPtr.Zero)
{
MONITORINFO monitorInfo = new MONITORINFO();
GetMonitorInfo(monitor, monitorInfo);
RECT rcWorkArea = monitorInfo.rcWork;
RECT rcMonitorArea = monitorInfo.rcMonitor;
mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.left - rcMonitorArea.left) // + 1;
mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top) // + 1;
mmi.ptMaxSize.x = Math.Abs(rcWorkArea.right - rcWorkArea.left) // - 1;
mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top) // - 1;
}
Marshal.StructureToPtr(mmi, lParam, true);
}
Но он мне нужен для панели привязки.
Поэтому, когда я добавляю его, он ТОЛЬКО работает, если я тоже
Код: Выделить всё
mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top) - {number here > 0};
mmi.ptMaxSize.x = Math.Abs(rcWorkArea.bottom - rcWorkArea.top) - {number here > 0};
Код: Выделить всё
mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top) + {number here > 0};
mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.top - rcMonitorArea.top) + {number here > 0};
Поэтому я здесь ищу помощи. Как я могу заставить его работать без пробелов?
Подробнее здесь: https://stackoverflow.com/questions/788 ... -maximized
Мобильная версия