【问题标题】:Translating X,Y Coordinate平移 X,Y 坐标
【发布时间】:2011-03-08 01:24:10
【问题描述】:

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

【问题讨论】:

    标签: silverlight aspect-ratio


    【解决方案1】:

    您可以使用 GeneralTransform 来确定 UIElement 相对于容器的位置。这是一个sn-p:

        /// <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,因为无论如何它都毫无用处,恕我直言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多