我有一个有椭圆的用户控件。我已将用户控件添加到画布。我尝试使用此代码来获取椭圆相对于画布的坐标:
double left = Canvas.GetLeft(ellipse);
由于椭圆,我认为,不是画布的直接成员我得到了NaN。我搜索过并找到了类似的东西:
Point relativePoint = ellipse.TransformToAncestor(canvas).Transform(new Point(0, 0));
但后来我一直在等待下面的代码没有提供实际的坐标,给了我不同的东西。我怎样才能获得实际坐标?
答案 0 :(得分:-1)
就是不要这样做。阅读一些关于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>
如果你这样做,你将永远不需要向控件询问它的坐标,而是代表它的对象。