1

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

4

1 回答 1

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 在实际调用它之前是否会抛出该异常“元素”。所以我只是简单地将TransformToVisual 的调用封装在一个try-catch 块中并吞下ArgumentException,因为无论如何恕我直言,它毫无用处。

于 2010-06-28T12:21:19.660 回答