2014-09-05 2 views
4

В моем приложении я использую Xamarin.FormsAbsoluteLayout. У меня есть панель меню. Когда я нажал кнопку меню, основное содержание (View) моего AbsoluteLayout должно быть заменено.Как удалить детей из AbsoluteLayout в Xamarin.Forms?

До сих пор я мог только достичь этого, добавив нового ребенка и установив границы его расположения, используя Children.Add() и SetLayBounds(). Но таким образом я добавляю все больше и больше детей и никогда их не удаляю.

Каков правильный способ удалить ребенка из AbsoluteLayout?

ответ

9

.Children реализует IList<View>ICollection<View>, IEnumerable<View>, Ienumerable), так что вы можете использовать в своем лучшем удобства:

  • layout.Children.RemoveAt (position),
  • layout.Children.Remove (view),
  • layout.Children.Clear()

предоставить вам знать индекс вашего вида в .Children, вы можете также заменить элемент на месте:

layout.Children[position] = new MyView(); 

но дает меньше возможностей, чем Children.Add (...) переопределения, и вы должны будете использовать SetLayoutBounds и SetLayoutFlags.

+0

Спасибо, только что нашел, что я сам! :-D – kaolick

0

Попробуйте следующий фрагмент, который использует метод RemoveAt коллекции AbsoluteLayout.Children.

В качестве альтернативы вы можете использовать метод Remove (View), если у вас есть ссылка на переменную.

 StackLayout objStackLayout = new StackLayout() 
     { 
     }; 
     // 
     AbsoluteLayout objAbsoluteLayout = new AbsoluteLayout()    
     { 
     }; 
     // 
     BoxView objBox1 = new BoxView() 
     { 
      Color = Color.Red, 
      WidthRequest = 50, 
      HeightRequest = 50, 
     }; 
     objAbsoluteLayout.Children.Add(objBox1, new Point(100,100)); 
     System.Diagnostics.Debug.WriteLine("Children Count : " + objAbsoluteLayout.Children.Count); 
     // 
     BoxView objBox2 = new BoxView() 
     { 
      Color = Color.Green, 
      WidthRequest = 50, 
      HeightRequest = 50, 
     }; 
     objAbsoluteLayout.Children.Add(objBox2, new Point(200, 200)); 
     System.Diagnostics.Debug.WriteLine("Children Count : " + objAbsoluteLayout.Children.Count); 
     // 
     Button objButton1 = new Button() 
     { 
      Text = "Remove First Child" 
     }; 
     objButton1.Clicked += ((o2, e2) => 
      { 
       if (objAbsoluteLayout.Children.Count > 0) 
       { 
        // To Remove a View at a specific index use:- 
        objAbsoluteLayout.Children.RemoveAt(0); 
        // 
        DisplayAlert("Children Count", objAbsoluteLayout.Children.Count.ToString(), "OK"); 
       } 
       else 
       { 
        DisplayAlert("Invalid", "There are no more children that can be removed", "OK"); 
       } 
      }); 

     // 
     objStackLayout.Children.Add(objAbsoluteLayout); 
     objStackLayout.Children.Add(objButton1); 
Смежные вопросы