我正在将 silverlight beta 2 应用程序升级到 RC0,并具有将点从子元素转换为其父元素的功能。该函数的目的是确保元素恰好出现在子元素的顶部,即使它们不在同一个画布上并且不共享父元素。
这是当前功能:
protected Point TranslatePosition(Point current, Panel from, Panel to, MouseEventArgs e)
{
Point rtn = new Point(-1, -1);
// get point relative to existing parent
Point fromPoint = e.GetPosition(from);
// get point relative to new parent
Point toPoint = e.GetPosition(to);
// calculate delta
double deltaX = fromPoint.X - toPoint.X;
double deltaY = fromPoint.Y - toPoint.Y;
// calculate new position
rtn = new Point(current.X - deltaX, current.Y - deltaY);
return rtn;
}
请注意,它依赖于 MouseEventArgs.GetPosition 函数来获取相对于现有父级和新父级的位置。在没有可用的 MouseEventArgs 的情况下,我们正在创建一个新实例并将其传入。这是一个 hack,但似乎有效。现在,在 RC0 中,MouseEventArgs 构造函数是内部的,所以这个 hack 不再有效。
关于如何编写一个方法来翻译 RC0 中不依赖于 MouseEventArgs.GetPosition 的点的任何想法?