<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在哪里?
答案 0 :(得分:1)
您的新按钮没有设置属性并被放入Grid
。这意味着它将填充给予它的整个区域(在这种情况下,整个窗口)。因为它将是最后一个孩子,它将具有最高的z-index并显示在原始按钮上。
所以基本上,你的整个窗口充满了你的新按钮。
要解决此问题,只需在新按钮上设置Width
,Height
和Margin
属性,以便它可以显示在您想要的位置(并且尺寸合适)。或者,只需使用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++;
}
}
另外,请记住,如果您没有指定要添加控件的列/行,则只会将它们添加到网格中的第一个单元格中!