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);