Удаление Stacklayout при нажатии кнопки - PullRequest
0 голосов
/ 05 августа 2020

У меня внешний стек при нажатии кнопки генерирует внутренний стек. Этот внутренний стек содержит такие элементы, как Label, combobox и delete_button. С помощью delete_button мне нужно удалить specifici c stacklayout. Может быть 100 stacklayout, и я могу удалить любое количество stacklayout. Это мой код delete_method

private void Delete_Clicked(object sender, EventArgs e)
        {
            stack.Children.Remove(label1); stack.Children.Remove(label2); stack.Children.Remove(label3);
            stack.Children.Remove(label4); stack.Children.Remove(border1);stack.Children.Remove(border2); 
           stack.Children.Remove(border3);      stack.Children.Remove(border4); 
            stack.Children.Remove(button);

            //var button = (SfButton)sender;
            //var parent = button.Parent;
            //OuterStack.Children.Remove(parent);// = (Button)sender;

           // stack.Children.Clear();
           
           // OuterStack.Children.Remove(stack1);
           //OuterStack.Children.Add(stack1);

        }

Сейчас только один stacklayout может удалить, если я раскомментирую все макеты стека, получится удалить. Я хочу удалить указанные c.

Ответы [ 2 ]

0 голосов
/ 09 августа 2020

при создании раздела назначьте ссылку на StackLayout кнопке с помощью свойства CommandParameter кнопки

StackLayout stack = new StackLayout();

Button delete = new Button { ... };
delete.CommandParameter = stack;
delete.Clicked = DeleteSection;

stack.Children.Add(delete);

в обработчике событий

protected void DeleteSection(object sender, EventArgs args)
{
  Button btn = (Button)sender;
  StackLayout stack = (StackLayout)btn.CommandParameter;

  // outer is the StackLayout that contains all sections
  // stack is the inner StackLayout that contains just one section
  outer.Children.Remove(stack);
}

здесь полный пример , который делает это (щелкните, чтобы увидеть gif)

введите описание изображения здесь

0 голосов
/ 05 августа 2020

Если OuterStack содержит только multi StackLayouts, вы просто должны вызвать следующую строку.

protected void DeleteSection(object sender, EventArgs args)
{          
   OuterStack.Children.RemoveAt(2);  // it will remove the third StackLayout in OuterStack
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...