0

我需要遍历 ListBox 控件的 VirtualizingStackPanel 以获取ListBoxItem.RenderSize值。在 C# 的 VB.NET 代码中,这可能是如何完成的?

背景:

我正在使用 WPF 中的第三方控件库,该库显然具有与其 Measure() 算法相关的错误(或“功能”)。相反,它执行了一个非常非标准的附加依赖属性来调整其中一个框架的大小。

为了解决这个问题,我重写了 Measure 并将我自己的值提供给附加属性,但是这些值被可视树中的干预值吃掉了。但是,我的 ListBox 的 Items 属性返回不包含大小信息的视图模型。视图模型的模板也没有,它必须自动调整大小。

4

1 回答 1

0

如果未创建容器(即超出视口范围),则必须获取作为 ListBox 模板子级的 ScrollViewer,然后调用 ScrollToHorisontalOffset 方法为项目创建容器。之后,您还应该调用 UpdateLayout 来强制生成容器 - 在这里您可以访问新创建的容器。请注意,RenderSize 没有正确的值,但您可以测量元素并获取其 DesiredSize。

请注意,如果您的列表框已折叠或容器生成未开始(或未完成),ContainerFromItem 可以返回 null - 检查 ItemContainerGenerator.Status 属性。

于 2013-06-19T20:34:15.647 回答