无法在画布中获取位置

本文关键字:获取 位置 布中 | 更新日期: 2023-09-27 18:35:26

我有一个带有椭圆的用户控件。我已将用户控件添加到画布。我尝试使用此代码来获取椭圆相对于画布的坐标:

double left = Canvas.GetLeft(ellipse);
由于椭圆,我认为,

不是画布的直接成员,我得到了 NaN。我搜索并找到了这样的东西:

Point relativePoint = ellipse.TransformToAncestor(canvas).Transform(new Point(0, 0));

但后来我惊讶于下面的代码没有提供实际的坐标,给了我一些不同的东西。如何获取实际坐标?

无法在画布中获取位置

只是不要这样做。阅读几篇关于 MVVM 的文章,你永远不需要问这样的事情

需要将控件绑定到 VM。

public class ControlVM
{
    public int X {get;set;}
    public int Y {get;set;}
}
<ItemsControl ItemsSource="{Binding Rectangles}" >
    ... specify Canvas as the items panel ...
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Canvas.Left" Value="{Binding X}" />
            <Setter Property="Canvas.Top" Value="{Binding Y}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

如果这样做,则永远不需要向控件询问其坐标,而是要求表示它的对象。