【问题标题】:How do I get the total height of all items inside an ItemsControl?如何获取 ItemsControl 中所有项目的总高度?
【发布时间】:2019-01-17 05:15:54
【问题描述】:

我尝试访问渲染大小、实际高度、高度,但没有提供我的 ItemsControl 元素内所有项目的高度 - 事实上,唯一返回值的属性是 ItemsControl.ActualHeight;但是,这将返回与嵌套在网格内的父 StackPanel 元素相同的大小。

是否有任何方法可以计算或拉取 ItemsControl 元素的完整高度以及生成/渲染的所有项目?目前,如果我的窗口以 1920x1080 呈现并且我的 ItemsControl 中有大量项目 - ItemsControl actualHeight 始终与窗口高度匹配;我需要能够确定我所有项目的全长以及它与窗口大小的比较。

非常感谢您的时间和帮助!

【问题讨论】:

    标签: c# uwp itemscontrol


    【解决方案1】:

    ItemsControls 是复杂的实体,你看,这些控件内置了渐进式/增量式加载,它是称为 Virtualization 的系统的一部分,它在所有 UI 系统中都非常普遍,当例如,您向下滚动 BinGooglGo 图像结果,您将获得渐进式加载。

    ItemSource 内的所有项目都不会同时呈现,而是只有用户看到的项目才有“物理”形式。

    通常例如,典型的 UWP ListView 只会渲染适合当前 ViewPort(可见区域)的确切数量的项目加上大约 10-视口以南和以北的另外 20 个项目,以准备滚动动作。

    编辑: 但是因为我不喜欢让我的答案不是解决方案,所以我将展示以下反模式:

    用 Scrollviewer 包装您的 ItemsControl,它会立即加载其所有内容。

    【讨论】:

    • 感谢您的快速响应!现在原谅我的 ItemsControl 菜鸟......但把它包裹在一个 Scrollviewer 上;你的意思是把滚动查看器放在数据模板中吗?项目模板?
    • 我的意思是把你的列表放在一个滚动查看器中,让我知道它是如何工作的。
    • 工作得更好,谢谢!对 xaml 来说仍然很新,但它在我身上成长。我要做的是绑定到 observableCollection (ItemsControl) 的视觉元素。我的目标是制作一个滚动器类,它采用这个元素并在显示上无缝滚动它——它通过复制 xaml 元素和动画 renderTransformationOrigin 来做到这一点;向上滚动一个视图,一旦该列表的底部到达我的视图底部,它就会告诉副本开始制作动画。他们以责任链风格互相调用,直到滚动状态发生变化
    • 哦,好吧,听起来您可能需要使用 WinRTXamltookit.uwp 来获取已存在于 itemscontrol 中的修正滚动视图,而且 indows Community Toolkit 具有可接近的动画封装。
    • 一切都在处理一个例外......我在后面的代码中动态添加的克隆 itemsControl(在我的自定义滚动器类中)将它添加到我的父 Canvas - 但 ActualHeight 之后为 0加载事件触发; renderSize 也为零;所以我的猜测是父元素还没有绘制新的子元素?你的想法?我已经走了这么远,并且在没有工具包的情况下如此接近我的解谜方想要解决这个问题哈哈......
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2023-04-03
    • 2023-03-25
    • 2016-12-10
    • 2020-05-14
    • 2012-07-25
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多