C# WPF Canvas.GetLeft()始终接收NaN值

C# WPF Canvas.GetLeft()始终接收NaN值,c#,wpf,C#,Wpf,我正试图离开WPF中的一个控件。但我总是收到NaN值,而不是双值。以下是我正在尝试的: XAML: 提前感谢。您只能在明确设置元素的初始值时,为元素获取Canvas.GetLeft的值,否则它将返回NaN(这是预期的WPF行为) 高度和宽度与相同 在您的示例中,在xaml中,您没有在边框上设置任何画布。Left属性,因此当您在code中访问它时,它将返回NaN 要获取实际的左坐标,请使用TranslatePoint p = localItem.TranslatePoint(new Point(0

我正试图离开WPF中的一个控件。但我总是收到NaN值,而不是双值。以下是我正在尝试的:

XAML:


提前感谢。

您只能在明确设置元素的初始值时,为元素获取
Canvas.GetLeft
的值,否则它将返回
NaN
(这是预期的
WPF
行为)

高度和宽度与
相同

在您的示例中,在
xaml
中,您没有在
边框上设置任何
画布。Left
属性,因此当您在code中访问它时,它将返回
NaN

要获取实际的
坐标,请使用
TranslatePoint

p = localItem.TranslatePoint(new Point(0, 0), br);
double currentLeft = p.X;
double currentTop = p.Y;

你看过这篇文章吗?有时候一小段代码非常强大。。谢谢你,瓜拉夫
Point p = e.GetPosition(cnvSaver);
            if (x > p.X)
            {
                // Move to Left
                Border br = cnvViewerUpper.Parent as Border;
                double left = Canvas.GetLeft(br) - Math.Abs(p.X - x);
                if(left > 0){
                    Canvas.SetLeft(br, left);
                }
                MessageBox.Show("move to left");
            }
            else if (x == p.X)
            {
                MessageBox.Show("standing");
            }
            else {
                // Move to Right
                double left = Canvas.GetLeft(borUpper);
                if (left > 0)
                {
                    Canvas.SetLeft(borUpper, left);
                }
                MessageBox.Show("move to right");
            }
p = localItem.TranslatePoint(new Point(0, 0), br);
double currentLeft = p.X;
double currentTop = p.Y;