我有一个按钮,当按下它时,它会将文本框和列表框添加到堆栈面板中,并将此堆栈面板添加到另一个名为"stackPanelAdd“的堆栈面板中。就像这样:
private void buttonAdd_Click(object sender, RoutedEventArgs e)
{
StackPanel sp = new StackPanel();
TextBox tb = new TextBox();
ListBox lb = new ListBox();
tb.Margin = new Thickness(5, 5, 5, 0);
lb.Margin = new Thickness(5, 5, 5, 0);
lb.Height = 200;
sp.Children.Add(tb);
sp.Children.Add(lb);
stackPanelAdd.Children.Add(sp);
}如何删除堆栈面板"stackPanelAdd“中的最后一个子项?我应该使用像stackPanelAdd.children.Remove这样的东西吗?如果是这样,那么我如何获取堆栈面板中的最后一个元素?
发布于 2012-02-21 18:03:28
尝试:
if (stackPanelAdd.Children.Count>0)
{
stackPanelAdd.Children.RemoveAt(stackPanelAdd.Children.Count-1);
}发布于 2012-02-22 01:19:02
这不是一个好主意,如果你坚持这种方法,事情迟早会变得非常混乱。在处理可以在WPF中添加和删除的项时,您需要在面板上使用某种类型的ItemsControl (您可以使用ItemsPanel属性更改面板,默认情况下它将是一个StackPanel)。
还可以通过使用data templates和data binding来改进控件的创建,这是您应该熟悉的核心机制。
举个例子:
<ItemsControl ItemsSource="{Binding Data}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Name}" Margin="5,5,5,0"/>
<ListBox ItemsSource="{Binding Items}" Margin="5,5,5,0" Height="200"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>这里的Data是一个源集合,它应该实现INotifyCollectionChanged,然后你只需从该集合中移除一个项目,它对应的StackPanel就会消失。Data中的项应该包含绑定的属性Name和Items,然后您可以为它们赋值或从中获取输入的文本(该类应该实现INPC,请阅读article on data binding中有关这些内容的更多信息)。
发布于 2012-02-21 18:06:56
您可以使用
var lastControl = stackPanelAdd.Children.LastOrDefault();
//Last is defined in System.Linq.Enumrable
if(lastControl != null)
stackPanelAdd.Children.Remove(lastControl);https://stackoverflow.com/questions/9375494
复制相似问题