C# xamarin表单将重复的stacklayout对象添加到scrollView
导言 我是C#编程新手,刚刚开始学习Xamarin表单。我正在使用Windows上的Visual Studio 2017中的Xamarin制作一个跨平台应用程序 当前情况 我创建了一个名为Buy的选项卡页面,它有一个名为BuyAnimals的内容页面 ContentPage需要一个ScrollView,它的子级是一个StackLayout StackLayout有3个子帧 在每个框架内,应该有一个名为animalStack的堆栈布局 animalStack有许多由StackLayout制作的孩子 问题。 如果我使用相同的animalStack作为三个帧中每个帧的内容,则只有最后一个帧显示animalStack的内容,而其他两个帧不显示任何内容 为什么其他帧没有显示上一帧中显示的信息的副本?我怎样才能让他们显示信息 我的代码如下所示。 `公共部分类购买:选项卡页 { 公开购买() { 初始化组件() 我非常感谢你的意见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制作的孩子
谢谢。看来这就是你想要做的:
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;
}