Xamarin Forms-如何实现最大高度功能?

3
具有属性,但没有属性。这是我的情况:
在页面内部,我有一个,我希望它最多增长到大约3个项目的高度,如果它比那更高,则滚动。在Web世界中,我只需使用属性。但在中,没有这样的属性,只有属性。
那么我该如何实现我的目标呢?
1个回答

0

我知道这是几年前的问题,但最近我遇到了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;
    }
}

我也尝试使用后一种方法来监听项目列表的增加,但效果不是很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接