在运行时添加WPF控件
我已经编写了一个WPF UserControl,并希望在运行时单击按钮时将其中一个或多个添加到我的窗口中。我该怎么做 编辑:进一步规范 我想将usercontrols添加到画布中,并放置在绝对位置。画布是我家地板的绘图,每个usercontrol都有属性来指示它在房子中的位置。因此,我希望所有控件都位于画布上的正确位置 我是这样想的在运行时添加WPF控件,wpf,Wpf,我已经编写了一个WPF UserControl,并希望在运行时单击按钮时将其中一个或多个添加到我的窗口中。我该怎么做 编辑:进一步规范 我想将usercontrols添加到画布中,并放置在绝对位置。画布是我家地板的绘图,每个usercontrol都有属性来指示它在房子中的位置。因此,我希望所有控件都位于画布上的正确位置 我是这样想的 var light = new LightUserControl(2); HouseCanvas.Children.Add(light); // this shou
var light = new LightUserControl(2);
HouseCanvas.Children.Add(light); // this should be positioned in a specific place
将StackPanel添加到窗口,并在每个按钮上单击
_stackPanel.Children.Add(new YourControl());
可以通过多种方式完成此操作。将控件添加到画布后,需要使用Canvas.top和Canvas.left附加属性指定顶部和左侧坐标,如下所示
var light = new LightUserControl(2);
HouseCanvas.Children.Add(light);
Canvas.SetLeft(light, 20);
Canvas.SetTop(light, 20);
如果要将控件添加到网格而不是画布,可以通过Grid静态类指定所有网格属性,如下所示:
Label newLabel = new Label();
newLabel.Content = "The New Element";
Main.Children.Add(newLabel);
Grid.SetColumn(newLabel, 0);
Grid.SetRow(newLabel, 0);
我的解决方案:
for (i = 1; i <= buttoncount; i++)
{
Button mybutton = new Button();
Grid1.Children.Add(mybutton);
mybutton.Height = 100;
mybutton.Width = 100;
mybutton.Name = "button" + i;
mybutton.Content = mybutton.Name;
}
for(i=1;i只是对答案的补充:
for (i = 1; i <= buttoncount; i++)
{
Button mybutton = new Button();
Grid1.Children.Add(mybutton);
mybutton.Height = 100;
mybutton.Width = 100;
mybutton.Name = "button" + i;
mybutton.Content = mybutton.Name;
mybutton.Click += button_Click;
}
private void button_Click(object sender, RoutedEventArgs e)
{
// do something
}
用于(i=1;我感谢,.Children属性是我所需要的。这不一定是最初提问者想要的,但它对我有帮助。谢谢。label
第二行必须是newLabel
对吗?@kame我猜在使用WPF几个小时后,我看不出它比WinForms有什么优势。我是说真的,他们似乎已经让简单的事情变得令人沮丧的困难、复杂,并在抽象层上层层实现。这些东西让我想打自己的脸。/rant/troll/untible commented完全同意-WPF比WinForms更漂亮,并且具有有用的蒙皮功能,但很难学习(无法发现),从编译时到运行时等等,都会产生很多错误。除了漂亮的图形,它的巨大复杂性几乎没有什么可显示的。我可以想出很多方法来改进它的设计。@EdS。令人印象深刻,确实是WPF的几个小时,而你已经得出了这个结论。@corrove:是的,我承认;做出这样的声明有点早。我喜欢WPF给你带来的强大功能。它还使原本简单的任务变得非常困难。我认为它不是一个很好的UI平台,但也不可怕,这是在WPF项目上工作了8个月后发生的。@侵蚀:“现在”事实上,我们将看到WPF在Windows8发布后的表现……此外,我还记得我发表过这样的评论。我相信这是因为我花了几个小时试图让(应该是)一些简单的鼠标事件处理程序工作后感到沮丧。
for (i = 1; i <= buttoncount; i++)
{
Button mybutton = new Button();
Grid1.Children.Add(mybutton);
mybutton.Height = 100;
mybutton.Width = 100;
mybutton.Name = "button" + i;
mybutton.Content = mybutton.Name;
mybutton.Click += button_Click;
}
private void button_Click(object sender, RoutedEventArgs e)
{
// do something
}