Tengo una cuadrícula de datos y quiero saber la posición de una celda de datos para superponerla con una ventana.
Funciona bien con solo un monitor, pero con varios monitores, la ventana se desplaza.
Aquí está el código:Coordenadas incorrectas en monitores múltiples
Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
myWindow.Top = point.Y;
myWindow.Left = point.X;
Alguien tiene alguna experiencia con el posicionamiento en varios monitores?
EDIT:
que hice siguiente prueba:
public MyWindow()
{
...
this.LocationChanged += MyWindow_LocationChanged;
}
void MyWindow_LocationChanged(object sender, EventArgs e)
{
Console.WriteLine(this.Top + " <--> " + this.PointToScreen(new Point(0, 0)).Y);
}
Resultados:
- Single-Monitor: 0 < -> 30; 20 < -> 50; 100 < -> 130
==> Siempre diferencia de 30 (puede deberse a la barra de título)
- Dual-Monitor: 0 < -> 30; 20 < -> 55; 100 < -> 153
==> En 0,0 diferencia de 30. Pero cuanto más moví la ventana de 0,0. cuanto mayor se convierte en la diferencia, pero debe permanecer igual. ¡Muy extraño!
Edit2:
aquí está mi solución, gracias a CodeNaked por la pista:
Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
PresentationSource source = PresentationSource.FromVisual(this);
myWindow.Top = point.Y/source.CompositionTarget.TransformToDevice.M22;
myWindow.Left = point.X/source.CompositionTarget.TransformToDevice.M11;
Por favor, publique los valores que obtenga y los valores que espera. –
No sé lo que tengo que hacer salvo. El PointToScreen y el punto de la ventana son los mismos, por lo que el error ya está en PointToScreen-Method. – SpeziFish
Agregó algunos resultados de prueba a la pregunta. – SpeziFish