所以我有几个Rectangle对象,我在画布操作增量事件中应用了平移和缩放。
private void RectCanvas_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
CurrentTransform.TranslateX += e.DeltaManipulation.Translation.X;
CurrentTransform.TranslateY += e.DeltaManipulation.Translation.Y;
CurrentTransform.ScaleX *= e.DeltaManipulation.Scale.X;
CurrentTransform.ScaleY *= e.DeltaManipulation.Scale.X;
}然后,我尝试使用以下命令获取Rectangle对象相对于画布的位置
public Point GetPosition()
{
//Set the GeneralTransform to get the position of rect on canvas
GeneralTransform = RectCanvas.TransformToVisual(Rect);
var rectPosition = GeneralTransform.Transform(new Point(0, 0));
rectPosition = new Point(Math.Abs(rectPosition.X), Math.Abs(rectPosition.Y));
return rectPosition;
}问题是,当我在其中一个矩形上执行缩放时,它的位置似乎相对于未缩放的那个发生了变化,即使两者在视觉上位于相同的位置(见下图)。
缩放的红色矩形返回点(10,24),而较小的橙色矩形返回点(20,48)。TransformToVisual不是返回topleft点吗?

我遗漏了什么?
发布于 2014-07-16 17:03:49
我已经弄明白了。它应该是
GeneralTransform = RectCanvas.TransformToVisual(Rect);Math.Abs也是必需的
private void updatePosition()
{
//Get rectangle position relative to canvas
TopLeft = Rect.TransformToVisual(RectCanvas).Transform(new Point(0, 0));
}https://stackoverflow.com/questions/24772775
复制相似问题