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

时间:2015-01-05 10:17:06

标签: c# wpf user-interface coordinates coordinate-transformation

我有一个位于主(也是唯一)屏幕左上角的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设置的多余详细信息)

1 个答案:

答案 0 :(得分:1)

您了解客户区,对吧?

如果你想找出孩子的位置,放到窗口的位置(0,0) ,第一次调用很有用,它将是客户区内的 。窗口边框(不与Border混淆)不是客户区域。

我认为第二个电话是窗口本身的坐标(包括边框)。