无法在画布中获得位置

时间:2016-02-19 14:36:17

标签: c# wpf canvas

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

double left = Canvas.GetLeft(ellipse);

由于椭圆,我认为,不是画布的直接成员我得到了NaN。我搜索过并找到了类似的东西:

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

但后来我一直在等待下面的代码没有提供实际的坐标,给了我不同的东西。我怎样才能获得实际坐标?

1 个答案:

答案 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>

如果你这样做,你将永远不需要向控件询问它的坐标,而是代表它的对象。