Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Remove Dynamically Added Controls in wpf

Tags:

c#

wpf

I am not able to delete dynamically added controls in button click event. Let me know how to do this.

public void populateform(ArrayList list)
{
  int i = 1;
  int count = 0;

  foreach (string cartitems in list)
  {
    Label lbl = new Label();
    lbl.Name = "myLabel"+i;

    lbl.Content = cartitems.ToString();
    mystackpanel.Children.Add(lbl);
    i++;
    ++count;
    if (count % 3 == 0)
    {
      Button btndelete = new Button();
      btndelete.Content = "Delete";

      btndelete.Width = 120;
      btndelete.Height = 35;
      btndelete.Click += new RoutedEventHandler(btndelete_Click);

      mystackpanel.Children.Add(btndelete);                    
    }
  }
}

private void btndelete_Click(object sender, RoutedEventArgs e)
{
  Label lbl2 = (Label)this.mystackpanel.FindName("myLabel2");
  this.mystackpanel.Children.Remove(lbl2);               
}
like image 488
user2613455 Avatar asked Sep 23 '13 13:09

user2613455


Video Answer


1 Answers

From the Remarks section in FindName:

FindName operates within the current element's namescope. For details, see WPF XAML Namescopes.

In short, you have to call RegisterName in order to make FindName work for dynamically created elements.

lbl.Name = "myLabel" + i;
lbl.Content = cartitems;
mystackpanel.Children.Add(lbl);
mystackpanel.RegisterName(lbl.Name, lbl); // here

It might however be easier to find an element by name like shown below, without using FindName.

var element = mystackpanel.Children
    .OfType<FrameworkElement>()
    .FirstOrDefault(e => e.Name == "myLabel2")
like image 118
Clemens Avatar answered Sep 23 '22 04:09

Clemens