在我的应用中,我使用Xamarin.Forms
AbsoluteLayout
。我有一个自定义菜单栏。当我点击菜单按钮时,我的View
的主要内容(AbsoluteLayout
)应该被替换。
到目前为止,我只能通过添加新子项并使用Children.Add()
和SetLayBounds()
设置其布局边界来实现这一目标。但是这样我就会添加越来越多的孩子,永远不会删除它们。
从AbsoluteLayout
移除儿童的正确方法是什么?
答案 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 (...)
覆盖相比,您提供的选项更少,而且您必须使用SetLayoutBounds
和SetLayoutFlags
。
答案 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);