Xamarin.Forms: 在容器中交换视图
Xamarin.Forms: Exchange view in container
我创建了一些页面
this.content1 = new DetailPage("ContentPage1");
this.content2 = new DetailPage("ContentPage2");
并且我定义了一个字段
private View detailView;
具有以下布局
Content = new StackLayout
{
Padding = new Thickness(0, Device.OnPlatform<int>(20, 0, 0), 0, 0),
Orientation = StackOrientation.Horizontal,
Children = {
buttonContainer,
this.detailView,
},
};
点击按钮 detailView
应该交换
private void Button1_Clicked(object sender, EventArgs e)
{
this.detailView = this.content1.Content;
}
调用了点击事件,但未更新视图。这是在容器中交换 "subview" 的错误方法吗?这是怎么做到的?
您需要从 Children 集合中删除当前的 detailView,然后再添加您的新视图。简单地交换 detailView 的值不会影响视觉 UI.
如果我正确理解了您的代码片段的上下文,那么这应该可以解决您的 Button1_Clicked
处理程序中的问题:
((StackLayout) Content).Children.Remove(this.detailView);
this.detailView = this.content1.Content;
((StackLayout) Content).Children.Add(this.detailView);
我创建了一些页面
this.content1 = new DetailPage("ContentPage1");
this.content2 = new DetailPage("ContentPage2");
并且我定义了一个字段
private View detailView;
具有以下布局
Content = new StackLayout
{
Padding = new Thickness(0, Device.OnPlatform<int>(20, 0, 0), 0, 0),
Orientation = StackOrientation.Horizontal,
Children = {
buttonContainer,
this.detailView,
},
};
点击按钮 detailView
应该交换
private void Button1_Clicked(object sender, EventArgs e)
{
this.detailView = this.content1.Content;
}
调用了点击事件,但未更新视图。这是在容器中交换 "subview" 的错误方法吗?这是怎么做到的?
您需要从 Children 集合中删除当前的 detailView,然后再添加您的新视图。简单地交换 detailView 的值不会影响视觉 UI.
如果我正确理解了您的代码片段的上下文,那么这应该可以解决您的 Button1_Clicked
处理程序中的问题:
((StackLayout) Content).Children.Remove(this.detailView);
this.detailView = this.content1.Content;
((StackLayout) Content).Children.Add(this.detailView);