调用 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本身的坐标(包括边框)。
我有一个 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本身的坐标(包括边框)。