在画布中定位自定义控件

本文关键字:自定义控件 定位 布中 | 更新日期: 2023-09-27 18:07:58

我有一个使用Canvas作为主UI的WPF应用程序。自定义控件在运行时动态地添加到Canvas中。我如何绝对定位这些自定义控件在运行时的画布?对于XAML,它非常直接:

<Label Name="myCoolLabel"
       Content="My Name"
       Width="200"
       Height="100"
       Canvas.Left="{Binding MyLabelX, Mode=OneWay}"
       Canvas.Top="{Binding MyLabelY, Mode=OneWay}" />

Canvas属性允许我通过绑定来设置位置。我甚至可以设置它,如果我不使用绑定。但是Canvas属性在代码中是不可用的。

我考虑过通过XAML添加这些控件,使它们默认不可见,然后在运行时通过绑定设置它们的位置,使它们可见,但这是不切实际的,有几个原因,一个是可能有几个或几十个动态控件。

是否有一些方法来设置在运行时添加的控件的绝对位置?这可能吗?

在画布中定位自定义控件

通过子控件的静态setter方法设置Canvas.TopCanvas.Left附加属性。

Canvas.SetLeft(myCoolLabel, 100);
Canvas.SetTop(myCoolLabel, 200);

然后通过

将控件添加到Canvas中
canvas.Children.Add(myCoolLabel);

其中canvas为Canvas控件的名称