Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时添加WPF控件_Wpf - Fatal编程技术网

在运行时添加WPF控件

在运行时添加WPF控件,wpf,Wpf,我已经编写了一个WPF UserControl,并希望在运行时单击按钮时将其中一个或多个添加到我的窗口中。我该怎么做 编辑:进一步规范 我想将usercontrols添加到画布中,并放置在绝对位置。画布是我家地板的绘图,每个usercontrol都有属性来指示它在房子中的位置。因此,我希望所有控件都位于画布上的正确位置 我是这样想的 var light = new LightUserControl(2); HouseCanvas.Children.Add(light); // this shou

我已经编写了一个WPF UserControl,并希望在运行时单击按钮时将其中一个或多个添加到我的窗口中。我该怎么做

编辑:进一步规范 我想将usercontrols添加到画布中,并放置在绝对位置。画布是我家地板的绘图,每个usercontrol都有属性来指示它在房子中的位置。因此,我希望所有控件都位于画布上的正确位置

我是这样想的

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
}