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
我无法理解pointRoot
和pointClient
的不同,因为它们似乎始终相等:
// [...] // 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
调用它们。