代码之家  ›  专栏  ›  技术社区  ›  Benny

转换X、Y坐标

  •  1
  • Benny  · 技术社区  · 14 年前

    我现在有一个用户控件,其中包含具有特定X、Y坐标的项,并且这些点必须在其中有限制。在这种情况下,这些位置是0>x>40和0>y>80(40x 80)。我托管这些项的控件是动态的,但具有基于窗口大小的特定纵横比。我需要将这些X&Y坐标转换为用户控件内的相对位置。任何帮助都会受到极大的重视!事先谢谢!如果这很重要/有帮助,我正在使用Silverlight。

    1 回复  |  直到 14 年前
        1
  •  4
  •   alexander.biskop    14 年前

    可以使用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;
        }
    

    干杯,亚历克斯

    [编辑]实际上,检查“容器”是否为空是不必要的-TransformToVisual也将接受空作为参数。 另一个问题:TransformToVisual将抛出一个参数异常,例如当“element”不可见、当前不在可视化树中等。 不幸的是,我找不到一种方法来确定TransformToVisual是否会在实际调用“element”之前抛出该异常。所以我简单地将对TransformToVisual的调用包装在一个try-catch块中,并接受了argumentException,因为它无论如何都是无用的。