所以我有几个Rectangle
个对象,我在canvas Manipulation Delta事件中应用了平移和缩放。
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;
}
问题是当我在其中一个矩形上执行缩放时,即使两个视觉上位于同一位置,它的位置也会相对于未缩放的位置发生变化(参见图像)。
缩放的红色矩形返回Point(10,24),而较小的橙色矩形返回Point(20,48)。 Isn&#t; t TransformToVisual
会返回topleft点吗?
我错过了什么?
答案 0 :(得分:0)
我已经弄清楚了。它应该是
GeneralTransform = RectCanvas.TransformToVisual(Rect);
所以Math.Abs
是必需的
private void updatePosition()
{
//Get rectangle position relative to canvas
TopLeft = Rect.TransformToVisual(RectCanvas).Transform(new Point(0, 0));
}