转换后获取元素位置
我有一个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)