我需要遍历ListBox控件的VirtualizingStackPanel以获得ListBoxItem.RenderSize值。在VB.NET代码的C#中,如何做到这一点?
背景:
我正在使用WPF中的第三方控件库,该控件库显然存在与其Measure()算法相关的bug(或“特性”)。相反,它做了一个非常不标准的附加依赖属性来调整它的一个框架的大小。
为了避免这种情况,我重写了度量并将我自己的值提供给附加的属性,但是这些值正在被视觉树中的中间值所吞噬。但是,我的ListBox的Items属性返回viewmodels,它不包含大小信息。视图模型的模板也不需要,它必须自动调整大小。
发布于 2013-06-20 04:34:16
如果容器没有创建(即,它超出了视口边界),则必须获取作为ListBox模板子的ScrollViewer,然后调用ScrollToHorisontalOffset方法为项创建容器。在此之后,您还应该调用UpdateLayout来强制生成容器-在这里您可以访问新创建的容器。注意,in没有正确的RenderSize值,但是您可以测量元素并获得它的DesiredSize。
请注意,如果列表框已折叠或容器生成未开始(或未完成),则ContainerFromItem可能返回null -请检查ItemContainerGenerator.Status属性。
https://stackoverflow.com/questions/17199180
复制相似问题