Xamarin Form s有一个MinimumHeight属性,但没有MaximumHeight属性。在一个页面中,我有一个ListView,我想把它增加到最多3个条目,如果它比这个更高,我就滚动它。在网络世界中,我会简单地使用max-height属性。但是在Xamarin Forms中没有这样的属性,只有MinimumHeight属性。那么我该如何实现我的目标呢?
Xamarin Form
MinimumHeight
MaximumHeight
ListView
max-height
Xamarin Forms
r1zk6ea11#
我知道这是几年前的问题,但我最近遇到了这个问题,它是ScrollView中的FlexLayout。我想出了一个愚蠢的解决方案,也许这可以为类似的情况提供一个视角。本质上,你用一个StackLayout来 Package 整个东西,用来设置最大高度。然后得到一个项目的高度,并根据列表中的项目数量在代码中设置它的高度。如果你每行有一个子项,这将是非常简单的。在我的例子中,项目在FlexLayout中,因为它们的长度不同,所以行为非常随机。因此,视图的结构为:
ScrollView
FlexLayout
StackLayout
<StackLayout x:Name="Wrapper"> <ScrollView> <FlexLayout x:Name="ItemList" SizeChanged="OnItemListSizedChanged"> // Items </FlexLayout> </ScrollView> </StackLayout>
在代码隐藏中:
private double _itemHeight; private void OnItemListSizedChanged(object sender, EventArgs e) { var childCount = ItemList!.GetChildren().Count; switch (childCount) { case 1: _itemHeight= ItemList.Height; Wrapper!.HeightRequest = _itemHeight; break; case > 2: Wrapper!.HeightRequest = _itemHeight * 2; // You can adjust the height accordingly. break; case >= 3: Wrapper!.HeightRequest = _itemHeight * 3; break; } }
对于摘牌事项,我也用了类似的方法衔接了
public Action OnItemsReduced;
当项目计数下降时收听。
private void OnItemListSizedReduced(object sender, EventArgs e) { var childCount = ItemList!.GetChildren().Count; switch (childCount) { case 0: Wrapper!.HeightRequest = -1; ItemList.HeightRequest = -1; // Reset the elements, important break; case 1: Wrapper!.HeightRequest = _itemHeight; break; case > 2: Wrapper!.HeightRequest = _itemHeight * 2; break; case >= 3: Wrapper!.HeightRequest = _itemHeight * 3; break; } }
我也尝试过用后一种方法来监听条目列表的增加,但效果不是很好。
1条答案
按热度按时间r1zk6ea11#
我知道这是几年前的问题,但我最近遇到了这个问题,它是
ScrollView
中的FlexLayout
。我想出了一个愚蠢的解决方案,也许这可以为类似的情况提供一个视角。本质上,你用一个
StackLayout
来 Package 整个东西,用来设置最大高度。然后得到一个项目的高度,并根据列表中的项目数量在代码中设置它的高度。如果你每行有一个子项,这将是非常简单的。在我的例子中,项目在FlexLayout
中,因为它们的长度不同,所以行为非常随机。因此,视图的结构为:
在代码隐藏中:
对于摘牌事项,我也用了类似的方法衔接了
当项目计数下降时收听。
我也尝试过用后一种方法来监听条目列表的增加,但效果不是很好。