0

所以我有几个Rectangle对象,我在画布 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)。不是TransformToVisual返回左上角吗?

在此处输入图像描述

我错过了什么?

4

1 回答 1

0

我已经想通了。它应该是

GeneralTransform = RectCanvas.TransformToVisual(Rect);

所以 doMath.Abs是必需的

private void updatePosition()
    {
        //Get rectangle position relative to canvas 
        TopLeft = Rect.TransformToVisual(RectCanvas).Transform(new Point(0, 0));
    }
于 2014-07-16T09:03:49.247 回答