【发布时间】:2011-07-13 02:19:48
【问题描述】:
我有一个 UIElement,它执行了各种转换(缩放和平移)。
有没有办法在转换后获取 UIElement 的位置?我试过GetValue(Canvas.TopProperty),但它并没有改变它加载的内容。
我一定遗漏了一些明显但不确定的东西。 (我用的是silverlight)
【问题讨论】:
标签: c# silverlight position transform
我有一个 UIElement,它执行了各种转换(缩放和平移)。
有没有办法在转换后获取 UIElement 的位置?我试过GetValue(Canvas.TopProperty),但它并没有改变它加载的内容。
我一定遗漏了一些明显但不确定的东西。 (我用的是silverlight)
【问题讨论】:
标签: c# silverlight position transform
尝试使用这种方法:
var offset = Application.RootVisual.TransformToVisual(myObject)
.Transform(new Point(0,0));
【讨论】:
这样做有点不直观,但可以做到。这是一个两步过程。一、你想用什么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 的左上角给出位置。
【讨论】:
编辑:
好的,这个怎么样?
myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
和
myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)
【讨论】: