转换后获取元素位置

Sko*_*der 6 c# silverlight position transform

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

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

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

Ada*_*ice 18

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

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

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

var transform = Application.RootVisual.TransformToVisual(myUiElement);
Run Code Online (Sandbox Code Playgroud)

transform现在的对象是可以使用在相同的方式改变任何事情的一般转化myUiElement相对于转化RootVisual

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

var myUiElementPosition = transform.Transform(new Point(0,0));
Run Code Online (Sandbox Code Playgroud)

myUiElementPosition现在是一个Point已转换并应在的位置UIElement,你要寻找的. new Point(0,0)是因为我假设你想要相对于左上角给出的位置RootVisual.