我有一个UIElement,它对它进行了各种变换(缩放和平移)。获取变换后的元素位置
有没有办法在转换后获得UIElement的位置?我试过GetValue(Canvas.TopProperty)
,但它不会从它被加载的内容改变。
我必须错过一些明显的东西,但不知道是什么。 (我正在使用silverlight)
我有一个UIElement,它对它进行了各种变换(缩放和平移)。获取变换后的元素位置
有没有办法在转换后获得UIElement的位置?我试过GetValue(Canvas.TopProperty)
,但它不会从它被加载的内容改变。
我必须错过一些明显的东西,但不知道是什么。 (我正在使用silverlight)
这是一个有点不直观要做到这一点,但它可以做到的。这是一个两步过程。首先,你要什么用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
现在已转换,应该是UIElement
你要找的位置Point
。使用new Point(0,0)
是因为我假设你想要给出相对于RootVisual
左上角的位置。
编辑:
好的这个怎么样?
myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
和
myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)
尝试使用这种方法:
var offset = Application.RootVisual.TransformToVisual(myObject)
.Transform(new Point(0,0));
我不太知道如何使用这个。此刻,我正在使用myObjectTransform.TranslateX + = 2.这会将对象移动2帧。我在哪里可以使用GeneralTransform方法?谢谢 – Skoder 2011-03-10 22:35:56
@Skoder我误解了你的设置。你可以尝试编辑的代码片段吗? – 2011-03-10 22:47:35
我得到正确的值,但是值与元素的位置不一样。该值仅相对于变换而不是对象的位置。所以变换的位置值被更新,但我需要元素的位置值。 – Skoder 2011-03-10 22:56:04