翻译X,Y坐标

时间:2010-06-24 22:18:04

标签: silverlight aspect-ratio

我目前有一个用户控件,其中包含具有特定X,Y坐标的项目,并且这些点必须在其中。在这种情况下,那些位置是0> 0。 X> 40和0> Y> 80(40x80)。我托管这些项目的控件是动态的,但具有基于窗口大小的特定宽高比。我需要翻译那些X& Y坐标到用户控件内的相对位置。任何帮助都非常有用!提前致谢!如果重要/有帮助,我正在使用Silverlight。

1 个答案:

答案 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,因为无论如何它都是无用的。