在运行时添加WPF控件

Fro*_*rud 29 wpf

我编写了一个WPF UserControl,并希望在单击按钮时在运行时将一个或多个添加到我的Window中.我怎样才能做到这一点?

编辑:进一步说明我想将usercontrols添加到Canvas,并放入绝对位置.画布是我家中楼层的图纸,每个用户控件都有属性,用于指示房屋的位置.所以我希望所有控件都放在画布上的正确位置.

我在想这样的事情

var light = new LightUserControl(2);
HouseCanvas.Children.Add(light); // this should be positioned in a specific place
Run Code Online (Sandbox Code Playgroud)

Ian*_*kes 41

将控件添加到Canvas后,需要使用Canvas.Top和Canvas.Left附加属性指定顶部和左侧坐标,如下所示.

var light = new LightUserControl(2);
HouseCanvas.Children.Add(light);
Canvas.SetLeft(light, 20);
Canvas.SetTop(light, 20);
Run Code Online (Sandbox Code Playgroud)

  • 使用WPF几个小时后,我看不出它如何优于WinForms.我的意思是,他们似乎已经让简单的事情变得令人沮丧地困难,复杂,并且在抽象层次上实现.这些东西让我想要打自己的脸./ rant/troll /无用的评论 (28认同)
  • @EdS.WPF令人印象深刻,字面上*小时*,你得出了这个结论. (12认同)
  • 完全同意Ed - WPF比WinForms更漂亮,并且具有用于蒙皮的有用功能,但它很难学习(不可发现),将大量错误从编译时推送到运行时等等,除了漂亮的图形之外它几乎没有展示其巨大的复杂性.我可以想到它的设计可以通过很多方式得到改进. (6认同)
  • @Erode:"现在"确实,我们将看到WPF在Windows 8发布后的表现如何......此外,我还记得发表评论.我相信这是因为花了好几个小时试图获得(应该是什么)一些简单的鼠标事件处理程序. (3认同)
  • @Erode:是的,我承认; 发表这个声明还为时过早.我喜欢WPF为它提供的力量.它还使得任务变得简单非常困难.我不认为它是一个很棒的UI平台,但也不是很糟糕,这是在WPF项目工作8个月之后. (2认同)

Ram*_*eza 13

如果要将控件添加到Grid而不是Canvas,可以通过Grid静态类指定所有Grid属性,如下所示:

Label newLabel = new Label();
newLabel.Content = "The New Element";
Main.Children.Add(newLabel);
Grid.SetColumn(newLabel, 0);
Grid.SetRow(newLabel, 0);
Run Code Online (Sandbox Code Playgroud)

  • 这不一定是原始提问者想要的,但它对我有帮助.谢谢. (2认同)