WPF客户端到屏幕点转换

我正在寻找一种转换方法,给出相对于屏幕上的Visual to Points的点数。 我找到了这个解决方案

http://social.msdn.microsoft.com/Forums/vstudio/en-US/b327c0bc-d27e-44fe-b833-c7db3400d632/how-to-get-control-location-in-screen-coordinate-system

我无法理解pointRootpointClient的不同,因为它们似乎始终相等:

 // [...] // Translate the point from the visual to the root. GeneralTransform transformToRoot = relativeTo.TransformToAncestor(root); Point pointRoot = transformToRoot.Transform(point); // Transform the point from the root to client coordinates. Matrix m = Matrix.Identity; Transform transform = VisualTreeHelper.GetTransform(root); if (transform != null) m = Matrix.Multiply(m, transform.Value); Vector offset = VisualTreeHelper.GetOffset(root); m.Translate(offset.X, offset.Y); Point pointClient = m.Transform(pointRoot); // [...] 

(完整代码点击链接)

似乎VisualTreeHelper.GetOffset(root)试图获得窗口的转换……

假设你的Visual来自Button控件…你在找这样的东西吗?:

 Point locationFromWindow = button1.TranslatePoint(new Point(0, 0), this); Point locationFromScreen = button1.PointToScreen(locationFromWindow); 

注意:这些都是Visual类的方法,因此您也可以直接从Visual调用它们。