具有属性,但没有属性。这是我的情况:
在页面内部,我有一个,我希望它最多增长到大约3个项目的高度,如果它比那更高,则滚动。在Web世界中,我只需使用属性。但在中,没有这样的属性,只有属性。
那么我该如何实现我的目标呢?
在页面内部,我有一个,我希望它最多增长到大约3个项目的高度,如果它比那更高,则滚动。在Web世界中,我只需使用属性。但在中,没有这样的属性,只有属性。
那么我该如何实现我的目标呢?
我知道这是几年前的问题,但最近我遇到了FlexLayout在ScrollView中的问题。我想出了一个笨拙的解决方案,也许这可以为类似情况提供一些视角。
基本上,您需要使用StackLayout来包装整个内容以设置最大高度。然后获取单个项目的高度,并根据列表中的项目数量在代码后端设置其高度。如果每行有一个子项,那么这将非常简单。在我的情况下,项目位于FlexLayout中,由于它们的长度不同,因此可能会表现得相当随机。
因此,视图的结构如下:
<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;
}
}
我也尝试使用后一种方法来监听项目列表的增加,但效果不是很好。