Canvas.SetTop(element,position)有什么问题

What is wrong with Canvas.SetTop(element,position)

我正在尝试使用鼠标并通过代码移动和重新定位元素。但我想我错过了什么或者做错了什么。所以我构建了一个小示例应用程序。它只是一个带有 MainWindow 函数的空 wpf 应用程序

    public MainWindow()
    {
        InitializeComponent();
        Label lText = new Label();
        lText.Content = "this is my test label";
        lText.Height = 50;
        lText.Width = 50;
        lText.Background = Brushes.Aqua;
        // do I really need to do this? 
        lText.VerticalAlignment = System.Windows.VerticalAlignment.Top;
        lText.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
        // this part already fails
        Canvas.SetTop(lText, 20);
        Canvas.SetLeft(lText, 10);
        this.Content = lText;
    }

附加属性 Canvas.LeftCanvas.Top(在后面的代码中由 Canvas.SetLeftCanvas.SetTop 方法设置)仅对以下元素有效Canvas 控件的直接子控件。

所以在主窗口的 XAML:

中声明一个 Canvas 作为内容元素
<Window ...>
    <Canvas x:Name="canvas" />
</Window>

然后在后面的代码中将元素添加到 Canvas' Children 集合中:

Canvas.SetTop(lText, 20);
Canvas.SetLeft(lText, 10);
canvas.Children.Add(lText);

解决方案是必须先在 Xaml 中设置 Left 和 Top 属性,然后才能阅读它。我总是得到 NaN,因此也无法设置正确的值。