转换后获取元素位置

我有一个UIElement,它上面进行了各种转换(缩放和翻译)。

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

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

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

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

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

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

transform对象现在是一个通用变换,可以用于转换任何内容,就像myUiElement相对于myUiElement转换一样

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

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

myUiElementPosition现在是一个已被转换的Point ,应该是您正在寻找的UIElement的位置。 new Point(0,0) ,因为我假设您希望相对于RootVisual左上角给出位置。

尝试使用这种方法:

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

TransformToVisual

编辑:

那怎么样?

 myObjectTransform.GetValue(CompositeTransform.TranslateXProperty) 

 myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)