public static Point TransformElementToElement(this UIElement @this, Point pt, UIElement target)
{
// Find the HwndSource for this element and use it to transform
// the point up into screen coordinates.
HwndSource hwndSource = (HwndSource)PresentationSource.FromVisual(@this);
pt = hwndSource.TransformDescendantToClient(pt, @this);
pt = hwndSource.TransformClientToScreen(pt);
// Find the HwndSource for the target element and use it to
// transform the rectangle from screen coordinates down to the
// target elemnent.
HwndSource targetHwndSource = (HwndSource)PresentationSource.FromVisual(target);
pt = targetHwndSource.TransformScreenToClient(pt);
pt = targetHwndSource.TransformClientToDescendant(pt, target);
return pt;
}