创建后如何获取项目的高度?

Posted

技术标签:

【中文标题】创建后如何获取项目的高度?【英文标题】:How to get item's height after is has been created? 【发布时间】:2014-09-09 20:02:30 【问题描述】:

我想用适合当前页面的项目填充ListView,这样我就不必滚动了。为此,我想添加一个项目,检查它的高度,如果它太大而无法容纳剩余的空间,我想删除它。

我的问题是:

    有没有更聪明的方法来解决这个问题? 何时查看已实现的物品高度?

在 Windows 8.1 中,ListView 控件没有ItemRealizedItemCreated 事件。那么什么时候检查物品的容器大小呢?

我尝试通过

获取尺寸
UIElement container = (UIElement)ItemsListView.ContainerFromItem(obj);
double height = container.DesiredSize.Height;

感谢您的帮助!

【问题讨论】:

您的意图是基本上想要一个分页集合(例如 100 个项目,每页显示 10 个项目 @ 10 页),还是明确只想要一个 ListView? 你说得对,目的是实现分页。但是我的项目可以有不同的高度,这样可能会发生在第一页上有 3 个项目,在第二个页面上有 5 个项目,依此类推...... 由于大小不同,您可能需要在 View 的代码中管理自己的活动列表/页面。 ActualHeight 属性将有助于确定可用的容器大小和我认为的项目的大小。 【参考方案1】:

不幸的是,除了 TabControl 之外,我不相信有内置的分页集合解决方案,这可能不是您想要的。

分页通常应该在视图模型/业务方面完成,所以如果你提前知道对象的大小,你可以做这样的事情How to paginate an ObservableCollection?或MVVM paging & sorting,为视图提供正确数量的项目。

如果需要更加动态和灵活,这是一篇关于使用WrapPanel 作为ItemsControl http://imduff.blogspot.com/2008/02/this-is-way-how-i-implemented-paging.html 的ItemsPanel 的分页的非常好的文章。

【讨论】:

以上是关于创建后如何获取项目的高度?的主要内容,如果未能解决你的问题,请参考以下文章

渲染后如何获取元素的高度?

如何在“onBindViewHolder”中获取recyclerview项目的高度

旋转后如何获取图像的宽度和高度?

方向改变后如何获取屏幕高度?

android - 获取以编程方式创建的视图的估计高度

SwiftUI - 如何在运行时更改内部内容后获取 ScrollView 内容高度