如何将新Button添加到Grid

时间:2016-11-28 22:14:04

标签: c# wpf

<Grid x:Name="myMainGrid">
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="134,94,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
</Grid>

追加:

private void button_Click(object sender, RoutedEventArgs e)
{
    Button newBtn = new Button();
    myMainGrid.Children.Add(newBtn);
}

问题:在功能&#34; button_Click&#34;整个WPF变灰了。没有创建按钮发生任何附加事件。即使静态按钮消失了。

我的目标:改变&#34;外观&#34;通过创建一个新的按钮来创建WPF。我知道它不会改变我很多,但我想尝试新事物。

我是一个新手,我不明白发生了什么......我应该创建一个新网格吗?这个bug在哪里?

2 个答案:

答案 0 :(得分:1)

您的新按钮没有设置属性并被放入Grid。这意味着它将填充给予它的整个区域(在这种情况下,整个窗口)。因为它将是最后一个孩子,它将具有最高的z-index并显示在原始按钮上。

所以基本上,你的整个窗口充满了你的新按钮

要解决此问题,只需在新按钮上设置WidthHeightMargin属性,以便它可以显示在您想要的位置(并且尺寸合适)。或者,只需使用StackPanel代替Grid,因为它会为您排列彼此相邻的按钮,并强制按钮尽可能小的尺寸(假设内容不足,可能由于0高度不可见,如果是这样,只需添加一些文字。)

作为一个非常重要的旁注,你不应该在WPF中以这种方式操纵可视化树。您将几乎总是拥有一个绑定的数据集合,让框架为您创建这些控件。

答案 1 :(得分:-1)

我过去在向Grid中动态添加控件时所做的一件事就是使用Grid.SetRow()和Grid.SetColumn()方法。这些基本上将您的控件和int作为参数,并将该控件设置为指定的行/列。例如,我使用它将多个画布控件(其中195个)添加到网格中,然后按特定顺序设置每个控件。

int row = 2; 
int column = 0;

for (int i = 0; i < 195; i++)
{
     Canvas c = new Canvas();

     gridMain.Children.Add(c);

     Grid.SetRow(c, row);
     Grid.SetColumn(c, column);  

     if (column == 14)
     {
         column = 0;
         row++;
     }
     else
     {
         column++;
     }
}

另外,请记住,如果您没有指定要添加控件的列/行,则只会将它们添加到网格中的第一个单元格中!