转换后获取元素位置

时间:2011-03-10 22:06:52

标签: c# silverlight position transform

我有一个UIElement,对它执行了各种转换(缩放和转换)。

有没有办法在转型后获得UIElement的位置?我试过了GetValue(Canvas.TopProperty),但它并没有改变它的加载方式。

我必须遗漏一些明显但不确定的东西。 (我正在使用silverlight)

3 个答案:

答案 0 :(得分:17)

这样做有点不直观,但可以做到。这是一个两步的过程。首先,您要使用TransformToVisual函数(from MSDN):

  

返回一个变换对象,可用于将UIElement中的坐标转换为指定对象。

TransformToVisual将产生一个GeneralTransform,它将执行从任何UIElement到任何其他UIElement的转换(假设它们都存在于同一个可视树中)。听起来你想要的是RootVisual的转换。

var transform = Application.RootVisual.TransformToVisual(myUiElement);

transform对象现在是一种常规转换,可用于转换任何内容,其转换方式与myUiElement相对于RootVisual转换的方式相同

下一步是使用该转换来转换点。

var myUiElementPosition = transform.Transform(new Point(0,0));

myUiElementPosition现在已成为Point已被转换,应该是您正在寻找的UIElement的位置。使用new Point(0,0)是因为我假设你想要相对于RootVisual左上角给出的位置。

答案 1 :(得分:2)

尝试使用这种方法:

var offset = Application.RootVisual.TransformToVisual(myObject)
                                   .Transform(new Point(0,0));

TransformToVisual

答案 2 :(得分:-1)

编辑:

那怎么样?

myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)

myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)