多个显示器上的坐标错误

Spe*_*ish 7 wpf multiple-monitors

我有一个Datagrid,我想知道datacell的位置,用窗口覆盖它.
只有一台显示器,它可以正常工作,但是有多个显示器,窗口就会移位.
这是代码:

Point point = cell.PointToScreen(new Point(0, 0));
...
Window myWindow = new Window();
myWindow.Top = point.Y;
myWindow.Left = point.X;
Run Code Online (Sandbox Code Playgroud)

有人在多台显示器上有定位经验吗?

编辑:
我做了以下测试:

public MyWindow()
{
    ...
    this.LocationChanged += MyWindow_LocationChanged;
}

void MyWindow_LocationChanged(object sender, EventArgs e)
{
    Console.WriteLine(this.Top + " <--> " + this.PointToScreen(new Point(0, 0)).Y);
}
Run Code Online (Sandbox Code Playgroud)

结果:
- 单显示器:0 < - > 30; 20 < - > 50; 100 < - > 130
==>始终相差30(可能由标题栏引起)
- 双显示器:0 < - > 30; 20 - 55; 100 < - > 153
==>在0,0的差异为30.但是我将窗口移离0,0.差异越大,但应保持不变.很奇怪!

EDIT2:
这是我的解决方案,感谢CodeNaked的提示:

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;
Run Code Online (Sandbox Code Playgroud)

Cod*_*ked 5

这可能与非标准DPI设置有关,但我很确定该设置会影响所有监视器.此博客显示了如何获得正确的位置.但代码是有效的:

PresentationSource source = PresentationSource.FromVisual(control);

double dpiX = 96.0 * source.CompositionTarget.TransformToDevice.M11;
double dpiY = 96.0 * source.CompositionTarget.TransformToDevice.M22;

window.Left = point.X * 96.0 / dpiX;
window.Top = point.Y * 96.0 / dpiY;
Run Code Online (Sandbox Code Playgroud)