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