访问ListBox中的ItemsPresenter项

时间:2013-06-19 18:59:57

标签: c# .net wpf vb.net xaml

我需要遍历ListBox控件的VirtualizingStackPanel来获取ListBoxItem.RenderSize值。在C#的VB.NET代码中,如何做到这一点?

背景:

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

为了解决这个问题,我将覆盖Measure并将自己的值提供给附加属性,但这些值正被可视化树中的中间值所吞噬。但是,我的ListBox的Items属性返回viewmodels,它不包含大小调整信息。 viewmodel的模板也不是必须自动调整大小的模板。

1 个答案:

答案 0 :(得分:0)

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

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

相关问题