我现在有一个包含有一定的X项目的用户控制,Y坐标和有限制到什么这些点必须在。 在这种情况下这些位置是0> X> 40和0> Y> 80(40x80)。 我在托管这些项目中的控制是动态的,但具有基于窗口大小一定的纵横比。 我需要翻译的X和Y坐标转换成用户控件中的相对位置。 任何帮助是极大apprecaited! 提前致谢! 如果它的事项/帮助,我使用Silverlight。
Answer 1:
您可以使用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的,因为它是相当无用反正恕我直言。
文章来源: Translating X,Y Coordinate