无法在画布中获取位置
本文关键字:获取 位置 布中 | 更新日期: 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>
如果这样做,则永远不需要向控件询问其坐标,而是要求表示它的对象。