【问题标题】:Setting HeightRequest of ListView as sum of all the Item's RowHeight将 ListView 的 HeightRequest 设置为所有 Item 的 RowHeight 的总和
【发布时间】:2018-03-23 03:09:30
【问题描述】:

ListView 的固有行为是它始终以固定高度呈现,而不管它显示的项目。如果有更多项目,则 ListView 将自动显示滚动条。现在我有 ListView,它已放在 ScrollViewer 中。由于 ListView 在 ScrollViewer 内,因此 ListView 的 Scrollbar 不起作用(它甚至不显示),因此我无法看到我的 Listview 中的所有项目。所以我想要的是 ListView 的高度应该是它显示所有项目而没有任何滚动条。我对这个问题的搜索表明该问题是已知问题,没有任何适当的修复。我尝试了不同帖子上建议的各种解决方法,但是它在运行时会产生一个或另一个问题。

解决此问题的唯一方法似乎是在加载列表时动态添加项目的行高,并将所有项目的行高之和设置为 ListView 的 HeightRequest。所以任何人都可以建议计算每个项目的 RowHeight 的正确方法。请注意,我的行不均匀,即每个项目的行高可能不同。

期待帮助指针/代码sn-ps。

谢谢

【问题讨论】:

    标签: c# listview xamarin.forms


    【解决方案1】:

    我认为您不能动态获取项目的行高。但是,您可以在视图模型中定义一个高度属性(例如,此代码示例中的ItemHeight)并绑定ListView 中每个单元格的HeightRequest 属性。然后你可以简单地循环遍历ListView的items源,得到高度的总和。

    XAML 列表视图:

    <ListView HasUnevenRows="true">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <AbsoluteLayout HeightRequest="{Binding ItemHeight}">
                        ...
                    </AbsoluteLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    C# 视图模型:

    public class ItemViewModel
    {
        ...
        public double ItemHeight { get; set; } = 50;
    }
    

    您可以根据ListView中显示的内容,为不同的项目为ItemHeight分配不同的值。

    【讨论】:

    • 在我看来,将固定高度分配给项目高度并不是一个好主意。我不确定这种方法将如何在具有不同字体设置的不同手机尺寸上发挥作用。此外,分配的高度将是近似高度,只有 n 这样的近似误差会随着项目数量的增加而累积。
    • 是否可以在项目高度上有两种方式绑定?
    • 我认为您不能对 HeightRequest 字段的项目高度进行双向绑定,因为您没有用于更改高度值的旋钮。你可以试试,但我怀疑它会起作用。将固定高度分配给项目高度是我现在能想到的最佳解决方案
    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2014-11-11
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多