我有一个UIElement,在其上执行了各种变换(缩放和移动)。
是否有一种方法可以获取UIElement在变换后的位置?我尝试使用GetValue(Canvas.TopProperty)
,但它的值与加载时一样。
我肯定是漏掉了一些明显的东西,但不确定是什么。(我正在使用silverlight)
我有一个UIElement,在其上执行了各种变换(缩放和移动)。
是否有一种方法可以获取UIElement在变换后的位置?我尝试使用GetValue(Canvas.TopProperty)
,但它的值与加载时一样。
我肯定是漏掉了一些明显的东西,但不确定是什么。(我正在使用silverlight)
虽然这样做有点不直观,但是它是可行的。 它需要两个步骤。 首先,您需要使用 TransformToVisual
函数(来自 MSDN):
返回一个变换对象,该对象可用于将坐标从 UIElement 转换为指定对象。
TransformToVisual
将产生一个 GeneralTransform
,该对象将执行从任何 UIElement 到任何其他 UIElement 的转换(假设它们都存在于相同的可视树中)。听起来您需要的是从 RootVisual
进行的转换。
var transform = Application.RootVisual.TransformToVisual(myUiElement);
transform
对象现在是一个通用的变换对象,可以用它以与RootVisual
相对的方式来转换任何东西,就像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));
编辑:
好的,这个怎么样?
myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
并且
myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)