【问题标题】:Find X/Y of a UIElement inside a Canvas在 Canvas 中查找 UIElement 的 X/Y
【发布时间】:2015-01-26 12:25:18
【问题描述】:

我在画布中有 UIElements(圆形/矩形)。我想获得相对于其父级(画布)的 UIElement 的 X/Y。但我无法得到它。

对此有一些解决方案。我试过这样做 (Find position of Button/UIElement on screen relative to grid Windows Phone)

var transform = button.TransformToVisual(grid);        
Point absolutePosition = transform.Transform(new Point(0, 0));

但我在 absolutePosition 中得到 0,0。我能够在地图上正确地看到圆圈。但我不知道为什么我会弄错 X/Y。

这是我的实际代码。

Canvas.SetLeft(shape, Position.X);
Canvas.SetBottom(shape, Position.Y);
canvas.Children.Add(shape);
var transform = shape.TransformToVisual(canvas);        
Point absolutePosition = transform.Transform(new Point(0, 0));

无论我在transform.Transform 中传递什么,我都会在输出中得到它。

【问题讨论】:

  • Canvas 附加属性(上、左、下、右)是否不合适?它们控制 Canvas 子元素的 X/Y 位置。
  • 后来我使用了 Canvas.GetLeft。他们工作正常。我在stackoverflow上进行了搜索,唯一能找到的解决方案就是这个(转换)。所以我想知道为什么它对我不起作用,
  • 你试过@Arie 的回答吗?环顾四周,似乎TranslatePoint 是首选方法。只需将他/她示例中对 grid 的引用替换为对您的画布的引用即可。

标签: c# wpf canvas uielement


【解决方案1】:

问题是您更改了布局,目前尚未对其进行评估和测量。只有在您的布局经过评估和测量后才能应用“变换”。

尝试改用TranslatePoint

Point positionOnGrid = shape.TranslatePoint(new Point(0, 0), grid);

或尝试在canvas.Children.Add(shape); 之后和TransformToVisual 之前调用UpdateLayout

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多