我有一个位于主(也是唯一)屏幕左上角的WPF窗口。我想将窗口中的点(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像素差异表明第一个调用认为窗口坐标系在边界之后开始,而第二个调用认为窗口是整体,包括非客户区域(调整边框和工具栏的大小)。这是真的吗?
(已编辑以删除有关DPI设置的多余详细信息)
答案 0 :(得分:1)
您了解客户区,对吧?
如果你想找出孩子的位置,放到窗口的位置(0,0) ,第一次调用很有用,它将是客户区内的点 。窗口边框(不与Border
混淆)不是客户区域。
我认为第二个电话是窗口本身的坐标(包括边框)。