在Canvas

时间:2016-09-19 20:20:57

标签: c# wpf xaml

我有一个WPF应用程序,它使用Canvas作为它的主UI。自定义控件在运行时动态添加到Canvas。如何在运行时将这些自定义控件绝对定位在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属性允许我通过Binding设置位置。如果我不使用Binding,我甚至可以设置它。但是Canvas属性不能通过代码获得。

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

有没有办法设置在运行时添加的控件的绝对位置?它甚至可能吗?

1 个答案:

答案 0 :(得分:1)

通过静态setter方法设置子控件的Canvas.TopCanvas.Left attached properties

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

然后通过

将控件添加到画布
canvas.Children.Add(myCoolLabel);

其中canvas是Canvas控件的名称。