C# xamarin表单将重复的stacklayout对象添加到scrollView

C# xamarin表单将重复的stacklayout对象添加到scrollView,c#,xamarin.ios,xamarin.android,xamarin.forms,scrollview,C#,Xamarin.ios,Xamarin.android,Xamarin.forms,Scrollview,导言 我是C#编程新手,刚刚开始学习Xamarin表单。我正在使用Windows上的Visual Studio 2017中的Xamarin制作一个跨平台应用程序 当前情况 我创建了一个名为Buy的选项卡页面,它有一个名为BuyAnimals的内容页面 ContentPage需要一个ScrollView,它的子级是一个StackLayout StackLayout有3个子帧 在每个框架内,应该有一个名为animalStack的堆栈布局 animalStack有许多由StackLayout制作的孩子

导言

我是C#编程新手,刚刚开始学习Xamarin表单。我正在使用Windows上的Visual Studio 2017中的Xamarin制作一个跨平台应用程序

当前情况

我创建了一个名为Buy的选项卡页面,它有一个名为BuyAnimals的内容页面

ContentPage需要一个ScrollView,它的子级是一个StackLayout

StackLayout有3个子帧

在每个框架内,应该有一个名为animalStack的堆栈布局

animalStack有许多由StackLayout制作的孩子

问题。

如果我使用相同的animalStack作为三个帧中每个帧的内容,则只有最后一个帧显示animalStack的内容,而其他两个帧不显示任何内容

为什么其他帧没有显示上一帧中显示的信息的副本?我怎样才能让他们显示信息

我的代码如下所示。

`公共部分类购买:选项卡页 { 公开购买() { 初始化组件()

我非常感谢你的意见


谢谢。

看来这就是你想要做的:

public partial class Buy (...){
    InitalizeComponent();
    Content = GetContent();
}

public View GetContent()
{
    var animalItemIdStack = new StackLayout
    {
        Children = {
                new Label { Text = "Post ID: "},
                new Label { Text = "Animal ID"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalUserIdStack = new StackLayout
    {
        Children = {
                new Label { Text = "user ID: "},
                new Label { Text = "Posting userID"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalBreedStack = new StackLayout
    {
        Children = {
                new Label { Text = "Breed: "},
                new Label { Text = "Animal's breed"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalGenderStack = new StackLayout
    {
        Children = {
                new Label { Text = "Gender: "},
                new Label { Text = "Animal's gender"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalAgeStack = new StackLayout
    {
        Children = {
                new Label { Text = "Age: "},
                new Label { Text = "Animal's age"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalColorStack = new StackLayout
    {
        Children = {
                new Label { Text = "Color: "},
                new Label { Text = "Animal's color"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalPriceStack = new StackLayout
    {
        Children = {
                new Label { Text = "Price: "},
                new Label { Text = "Animal's price"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalLocationStack = new StackLayout
    {
        Children = {
                new Label { Text = "Location: "},
                new Label { Text = "Animal owner's location"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalEmailStack = new StackLayout
    {
        Children = {
                new Label { Text = "Location: "},
                new Label { Text = "Animal's location"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalPhoneStack = new StackLayout
    {
        Children = {
                new Label { Text = "Phone: "},
                new Label { Text = "Animal owner's phone"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalDatePostedStack = new StackLayout
    {
        Children = {
                new Label { Text = "Posted: "},
                new Label { Text = "Posted date"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalLastEditStack = new StackLayout
    {
        Children = {
                new Label { Text = "Last Edit: "},
                new Label { Text = "Last Edited date"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalStack = new StackLayout
    {
        Children =
            {
                animalItemIdStack,
                animalUserIdStack,
                animalBreedStack,
                animalGenderStack,
                animalAgeStack,
                animalColorStack,
                animalPriceStack,
                animalLocationStack,
                animalEmailStack,
                animalEmailStack,
                animalPhoneStack,
                animalDatePostedStack,
                animalLastEditStack
            },
        Orientation = StackOrientation.Vertical
    };

    var animalFrame = new Frame();
    animalFrame.Content = animalStack;


    var listView = new ListView();
    listView.ItemTemplate = new DataTemplate(() =>
    {
        return new ViewCell { View = animalFrame };
    });
    listView.ItemsSource = new List<object>()
            {
                new object(),
                new object(),
                new object(),
            };

    var contentStack = new StackLayout();
    contentStack.Children.Add(listView);

    return contentStack;
}
公共部分类购买(…){
初始化组件();
Content=GetContent();
}
公共视图GetContent()
{
var animalItemIdStack=新堆栈布局
{
儿童={
新标签{Text=“Post ID:”},
新标签{Text=“Animal ID”}
},
方向=堆叠方向。水平
};
var animalUserIdStack=新堆栈布局
{
儿童={
新标签{Text=“用户ID:”},
新标签{Text=“Posting userID”}
},
方向=堆叠方向。水平
};
var animalBreedStack=新堆栈布局
{
儿童={
新标签{Text=“繁殖:”},
新标签{Text=“动物品种”}
},
方向=堆叠方向。水平
};
var animalGenderStack=新堆栈布局
{
儿童={
新标签{Text=“Gender:”},
新标签{Text=“动物性别”}
},
方向=堆叠方向。水平
};
var animalAgeStack=新堆栈布局
{
儿童={
新标签{Text=“Age:”},
新标签{Text=“动物年龄”}
},
方向=堆叠方向。水平
};
var animalColorStack=新堆栈布局
{
儿童={
新标签{Text=“Color:”},
新标签{Text=“动物的颜色”}
},
方向=堆叠方向。水平
};
var animalPriceStack=新堆栈布局
{
儿童={
新标签{Text=“Price:”},
新标签{Text=“动物价格”}
},
方向=堆叠方向。水平
};
var animalocationstack=新堆栈布局
{
儿童={
新标签{Text=“Location:”},
新标签{Text=“动物主人的位置”}
},
方向=堆叠方向。水平
};
var animalEmailStack=新堆栈布局
{
儿童={
新标签{Text=“Location:”},
新标签{Text=“动物的位置”}
},
方向=堆叠方向。水平
};
var animalPhoneStack=新堆栈布局
{
儿童={
新标签{Text=“Phone:”},
新标签{Text=“动物主人的电话”}
},
方向=堆叠方向。水平
};
var animalDatePostedStack=新堆栈布局
{
儿童={
新标签{Text=“Posted:”},
新标签{Text=“发布日期”}
},
方向=堆叠方向。水平
};
var animalLastEditStack=新堆栈布局
{
儿童={
新标签{Text=“上次编辑:”},
新标签{Text=“上次编辑日期”}
},
方向=堆叠方向。水平
};
var animalStack=新堆栈布局
{
孩子们=
{
动物迁徙,
动物队,
动物繁殖体,
Animalgenedstack,
动物包装,
动物色堆栈,
动物界,
Animationstack,
animalEmailStack,
animalEmailStack,
动物传声筒,
animalDatePostedStack,
动物堆栈
},
方向=堆叠方向。垂直
};
var animalFrame=新帧();
animalFrame.Content=animalStack;
var listView=new listView();
listView.ItemTemplate=新数据模板(()=>
{
返回新的ViewCell{View=animalFrame};
});
listView.ItemsSource=新列表()
{
新对象(),
新对象(),
新对象(),
};
var contentStack=new StackLayout();
contentStack.Children.Add(listView);
返回contentStack;
}
您需要使用绑定来补充此方法。 请参阅关于绑定和关于listview模板


我希望它能帮助您。

您不能将同一个视图实例多次添加到布局中。您需要创建一个新实例。看起来像StackLayout对象的某些属性(以及其他类似属性)在基于其父对象显示时定义/计算,因此同一个it实例不能有多个父对象。为什么要尝试重用同一个实例?尽管在本spe中
public partial class Buy (...){
    InitalizeComponent();
    Content = GetContent();
}

public View GetContent()
{
    var animalItemIdStack = new StackLayout
    {
        Children = {
                new Label { Text = "Post ID: "},
                new Label { Text = "Animal ID"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalUserIdStack = new StackLayout
    {
        Children = {
                new Label { Text = "user ID: "},
                new Label { Text = "Posting userID"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalBreedStack = new StackLayout
    {
        Children = {
                new Label { Text = "Breed: "},
                new Label { Text = "Animal's breed"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalGenderStack = new StackLayout
    {
        Children = {
                new Label { Text = "Gender: "},
                new Label { Text = "Animal's gender"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalAgeStack = new StackLayout
    {
        Children = {
                new Label { Text = "Age: "},
                new Label { Text = "Animal's age"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalColorStack = new StackLayout
    {
        Children = {
                new Label { Text = "Color: "},
                new Label { Text = "Animal's color"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalPriceStack = new StackLayout
    {
        Children = {
                new Label { Text = "Price: "},
                new Label { Text = "Animal's price"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalLocationStack = new StackLayout
    {
        Children = {
                new Label { Text = "Location: "},
                new Label { Text = "Animal owner's location"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalEmailStack = new StackLayout
    {
        Children = {
                new Label { Text = "Location: "},
                new Label { Text = "Animal's location"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalPhoneStack = new StackLayout
    {
        Children = {
                new Label { Text = "Phone: "},
                new Label { Text = "Animal owner's phone"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalDatePostedStack = new StackLayout
    {
        Children = {
                new Label { Text = "Posted: "},
                new Label { Text = "Posted date"}
            },
        Orientation = StackOrientation.Horizontal
    };
    var animalLastEditStack = new StackLayout
    {
        Children = {
                new Label { Text = "Last Edit: "},
                new Label { Text = "Last Edited date"}
            },
        Orientation = StackOrientation.Horizontal
    };

    var animalStack = new StackLayout
    {
        Children =
            {
                animalItemIdStack,
                animalUserIdStack,
                animalBreedStack,
                animalGenderStack,
                animalAgeStack,
                animalColorStack,
                animalPriceStack,
                animalLocationStack,
                animalEmailStack,
                animalEmailStack,
                animalPhoneStack,
                animalDatePostedStack,
                animalLastEditStack
            },
        Orientation = StackOrientation.Vertical
    };

    var animalFrame = new Frame();
    animalFrame.Content = animalStack;


    var listView = new ListView();
    listView.ItemTemplate = new DataTemplate(() =>
    {
        return new ViewCell { View = animalFrame };
    });
    listView.ItemsSource = new List<object>()
            {
                new object(),
                new object(),
                new object(),
            };

    var contentStack = new StackLayout();
    contentStack.Children.Add(listView);

    return contentStack;
}