1

我正在寻找一种方法来转换与屏幕上的视觉点相关的给定点。我找到了这个解决方案:

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

我无法理解 thepointRoot和 the之间的不同,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)试图获得窗口的变换......

4

1 回答 1

6

假设你Visual来自一个Button控制......你在寻找这样的东西吗?:

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

Point locationFromScreen = button1.PointToScreen(locationFromWindow);

注意:这些都是Visual类的方法,所以你也可以Visual直接从你的.

于 2013-08-07T13:00:10.330 回答