如何解决listview中listview的高度问题
我花了很多时间在这件事上。。。有人能帮我解决这个问题吗?如何解决listview中listview的高度问题,listview,xamarin,xamarin.forms,height,Listview,Xamarin,Xamarin.forms,Height,我花了很多时间在这件事上。。。有人能帮我解决这个问题吗? 我的目标是制作一个卡片(框架)列表,每张卡片有两个标签和一个(简短的)项目列表 为了使内容更具可读性,我选择使用框架及其内容创建自定义组件。 如果我做一个框架列表,每个框架只有标签,一切看起来都很好(第一张图片)。框架的高度仅为所需的高度,不多。 但是当我在框架中添加第二级listview时,所有这些列表在其项目(第二个图像)后浪费了大量的空高度!!!我无法摆脱这浪费的空间。。。Grrrr 我只向您发布自定义组件的代码(第二级listv
我的目标是制作一个卡片(框架)列表,每张卡片有两个标签和一个(简短的)项目列表 为了使内容更具可读性,我选择使用框架及其内容创建自定义组件。
如果我做一个框架列表,每个框架只有标签,一切看起来都很好(第一张图片)。框架的高度仅为所需的高度,不多。
但是当我在框架中添加第二级listview时,所有这些列表在其项目(第二个图像)后浪费了大量的空高度!!!我无法摆脱这浪费的空间。。。Grrrr
我只向您发布自定义组件的代码(第二级listview):
我尝试在任何地方添加VerticalAlign=“Start”,但没有任何帮助。使用hasRows=“True”对该问题没有影响。
有人能帮我吗?
您可以使用 下面的代码与您需要的非常相似。我编写了一个基本模型,如果需要,您可以随时实现
INotifyPropertyChanged
接口
模型/视图模型:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
XAML:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
。。。
...
输出:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
编辑:我忘了添加ViewBox分隔符和边框CornerRadius和BorderColor
您可以使用
下面的代码与您需要的非常相似。我编写了一个基本模型,如果需要,您可以随时实现INotifyPropertyChanged
接口
模型/视图模型:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
XAML:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
。。。
...
输出:
public class CardModel
{
public string TaskHeading { get; set; }
public string PeopleHeading { get; set; }
public CardItemModel[] Items { get; set; }
public class CardItemModel
{
public string Mark { get; set; }
public string Description { get; set; }
}
}
public class CardsPageViewModel
{
public CardModel[] Tasks { get; set; }
public CardsPageViewModel()
{
Tasks = Enumerable.Range(1, 10).Select(i =>
new CardModel
{
TaskHeading = $"TaskHeading {i}",
PeopleHeading = $"People Heading {i}",
Items = Enumerable.Range(1, 4).Select(j =>
new CardModel.CardItemModel
{
Mark = $"Mark {j}",
Description = $"Description {j}"
}).ToArray()
}).ToArray();
}
}
...
<ScrollView>
<StackLayout BindableLayout.ItemsSource="{Binding Tasks, Mode=OneWay}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame>
<StackLayout>
<Label Text="{Binding TaskHeading, Mode=OneWay}" FontAttributes="Bold"/>
<Label Text="{Binding PeopleHeading, Mode=OneWay}"/>
<StackLayout BindableLayout.ItemsSource="{Binding Items, Mode=OneWay}" BackgroundColor="LightPink">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Mark, Mode=OneWay}"/>
<Label Text="{Binding Description, Mode=OneWay}"/>
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</ScrollView>
...
编辑:我忘了添加ViewBox分隔符和边框CornerRadius和BorderColor
嵌套列表视图几乎总是一个可怕的想法。如果你真的需要这个,考虑使用ListVIEW GrangStudio嵌套的ListVIEW几乎总是一个可怕的,可怕的想法。如果你真的需要这个,考虑使用ListVIEW GuangPin感谢很多!!!它是如此清晰和详细。我没料到会有这样的答复。我真的很感动。我不知道Bindable的布局。看起来真的很有趣。我会仔细研究这个问题。再次感谢。非常感谢!!!它是如此清晰和详细。我没料到会有这样的答复。我真的很感动。我不知道Bindable的布局。看起来真的很有趣。我会仔细研究这个问题。再次感谢。