如何从Xamarin.Forms中的AbsoluteLayout中删除子项?

时间:2014-09-05 10:35:00

标签: children removechild xamarin.forms absolutelayout

在我的应用中,我使用Xamarin.Forms AbsoluteLayout。我有一个自定义菜单栏。当我点击菜单按钮时,我的View的主要内容(AbsoluteLayout)应该被替换。

到目前为止,我只能通过添加新子项并使用Children.Add()SetLayBounds()设置其布局边界来实现这一目标。但是这样我就会添加越来越多的孩子,永远不会删除它们。

AbsoluteLayout移除儿童的正确方法是什么?

2 个答案:

答案 0 :(得分:10)

.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 (...)覆盖相比,您提供的选项更少,而且您必须使用SetLayoutBoundsSetLayoutFlags

答案 1 :(得分:0)

尝试使用AbsoluteLayout.Children集合的RemoveAt方法的以下代码段。

或者,如果您有变量引用,则可以使用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);