首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于不同比例的UIElements,TransformToVisual会返回不同的值

对于不同比例的UIElements,TransformToVisual会返回不同的值
EN

Stack Overflow用户
提问于 2014-07-16 13:24:34
回答 1查看 651关注 0票数 0

所以我有几个Rectangle对象,我在画布操作增量事件中应用了平移和缩放。

代码语言:javascript
运行
复制
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对象相对于画布的位置

代码语言:javascript
运行
复制
  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点吗?

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-07-16 17:03:49

我已经弄明白了。它应该是

代码语言:javascript
运行
复制
GeneralTransform = RectCanvas.TransformToVisual(Rect);

Math.Abs也是必需的

代码语言:javascript
运行
复制
private void updatePosition()
    {
        //Get rectangle position relative to canvas 
        TopLeft = Rect.TransformToVisual(RectCanvas).Transform(new Point(0, 0));
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24772775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档