TransformToVisual为具有不同比例的UIElements返回不同的值

时间:2014-07-16 05:24:34

标签: c# windows-phone-8 wpf-controls transformation transformtovisual

所以我有几个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点吗?

enter image description here

我错过了什么?

1 个答案:

答案 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));
    }