Я знаю, что вы уже решили свою проблему, но я опубликую найденное мной решение, если оно поможет другим.
В основном, Вы должны объявить, что SetWindowsPos как импортированная функция из Win32 это подпись
[DllImport("user32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
Функция нуждается в hWnd вашего окна, чтобы получить его, вы можете добавить обработчик при инициализации ваших окон (например, вы можете прослушивать событие «SourceInitialized») и сохранить это значение в приватном члене класс:
hwndSource = PresentationSource.FromVisual((Visual)sender) as HwndSource;
WPF управляет независимыми от устройства пикселями, поэтому для вашего экрана вам даже понадобится конвертер из изображения в пиксель в пиксель. Это делается с помощью следующих строк:
var source = PresentationSource.FromVisual(this);
Matrix transformToDevice = source.CompositionTarget.TransformToDevice;
Point[] p = new Point[] { new Point(this.Left + e.HorizontalChange, this.Top), new Point(this.Width - e.HorizontalChange, this.Height) };
transformToDevice.Transform(p);
Наконец, вы можете вызвать SetWindowsPos:
SetWindowPos(this.hwndSource.Handle, IntPtr.Zero, Convert.ToInt32(p[0].X), Convert.ToInt32(p[0].Y), Convert.ToInt32(p[1].X), Convert.ToInt32(p[1].Y), SetWindowPosFlags.SWP_SHOWWINDOW);
Источники: