调用 PointToScreen 与 CompositionTarget.TransformToDevice 时的不同答案

Different answers when calling PointToScreen vs CompositionTarget.TransformToDevice

我有一个 WPF window 位于我的主(也是唯一)屏幕的左上角。我想将 window 中的点 (0,0) 转换为屏幕坐标。我相信以下两个调用应该给我相同的结果:

1.这导致 (8,8)...

window.PointToScreen(new Point(0,0));

2。这导致 (0,0)...

PresentationSource.FromVisual(window).CompositionTarget.TransformToDevice.Transform(new Point(0,0));

为什么?

8 像素的差异表明第一次调用考虑 window 坐标系在边界之后开始,而第二次调用将 window 视为一个整体,包括非客户区(调整大小边框和工具栏)。是真的吗?

(编辑以删除有关 DPI 设置的多余细节)

你知道客户区,对吧?

如果你想找出 child 的位置,第一次调用很有用,将其放入 window 的位置 (0,0) ,它将成为客户区域内的一个点。 Window 边框(不要与 Border 混淆) 不是 客户区域。

第二个调用,如我所见,是window本身的坐标(包括边框)。