我目前有一个用户控件,其中包含具有特定X,Y坐标的项目,并且这些点必须在其中。在这种情况下,那些位置是0> 0。 X> 40和0> Y> 80(40x80)。我托管这些项目的控件是动态的,但具有基于窗口大小的特定宽高比。我需要翻译那些X& Y坐标到用户控件内的相对位置。任何帮助都非常有用!提前致谢!如果重要/有帮助,我正在使用Silverlight。
答案 0 :(得分:4)
您可以使用GeneralTransform确定UIElement相对于容器的位置。这是一个片段:
/// <summary>
/// Gets the position of the specified element's top left corner, relative to the specified container.
/// </summary>
/// <param name="element"></param>
/// <param name="container"></param>
public static Point GetPosition(UIElement element, UIElement container)
{
if (element == null)
throw new ArgumentNullException("element");
if (container == null)
throw new ArgumentNullException("container");
var gt = element.TransformToVisual(container);
var position = gt.Transform(new Point(0, 0));
return position;
}
干杯,亚历克斯
[编辑]事实上,检查“容器”为null是不必要的 - TransformToVisual也将接受null作为参数。 另一个问题:TransformToVisual将抛出ArgumentException,例如:当“元素”不可见时,目前不在视觉树等中等。 不幸的是,我找不到一种方法来确定TransformToVisual是否会在“element”上实际调用它之前抛出该异常。所以我只是在try-catch块中包含对TransformToVisual的调用并吞下了ArgumentException,因为无论如何它都是无用的。