我有一个UIElement,对它执行了各种转换(缩放和转换)。
有没有办法在转型后获得UIElement的位置?我试过了GetValue(Canvas.TopProperty)
,但它并没有改变它的加载方式。
我必须遗漏一些明显但不确定的东西。 (我正在使用silverlight)
答案 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));
答案 2 :(得分:-1)
编辑:
那怎么样?
myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
和
myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)