Cómo mover otra ventana dentro de WPF mientras se está moviendo una.
He encontrado una solución que funciona con un proceso, pero quiero mover la MainWindow
cuando se mueve mi otra ventana.
La solución siguiente funciona con procesos como el bloc de notas y lo mueve correctamente, pero ¿cómo puedo aplicar esto a la MainWindow
?
private Process AppToMove = Process.Start("notepad.exe");
private void Window_LocationChanged(object sender, EventArgs e)
{
if (AppToMove != null)
{
AppToMove.WaitForInputIdle();
}
var xx = Application.Current.MainWindow.Top;
var yy = Application.Current.MainWindow.Left;
var zz = Application.Current.MainWindow.Width;
var zzz = Application.Current.MainWindow.Height;
var answer = yy + zz + ((yy + zz) * 0);
var answer2 = xx + zzz + ((xx + zzz) * .0) - zzz;
int IntY = (int)answer;
int IntX = (int)answer2;
CustomMove(AppToMove, IntY, IntX, 375, 812);
}
public void CustomMove(Process process, int x, int y, int width, int height)
{
MoveWindow(process.MainWindowHandle, x, y, width, height, true);
}
[DllImport("user32.dll", SetLastError = true)]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
La MainWindow
se puede mostrar con
MainWindow MW = new MainWindow();
MW.Show();
pero ¿cómo se puede mover desde la otra ventana?
¿O es más sencillo crear un proyecto secundario, separar los dos y llamar al proceso/archivo ejecutable desde el segundo proyecto después de la compilación?
davy.ai
Para aplicar la solución a
MainWindow
, debes modificar el métodoCustomMove
para que acepte un parámetroWindow
en lugar de un parámetroProcess
. Luego, en el controlador de eventosWindow_LocationChanged
, puedes pasarApplication.Current.MainWindow
como parámetro aCustomMove
.Aquí tienes un fragmento de código actualizado:
Puedes llamar a
MainWindow
desde otra ventana utilizando el mismo código que proporcionaste:Separar los dos en proyectos separados también podría funcionar, pero no es necesario en este caso.