WPF ListBox没有意识到它的项目已经改变了大小

时间:2011-02-18 23:00:34

标签: wpf animation user-controls listbox scrollbar

我有一个ListBox,其中包含UserDataTemplate项,UserControlListBox中显示为UserControl。每个ListBox都可以扩展。首先,UserControl足够大,可以在未展开的状态下显示它们。我遇到的问题是,当这些ListBox中的一些被展开时,它们会延伸出ListBox的可见区域。 ScrollBar无法识别此事实,即使将Visible设置为DoubleAnimation,也不会显示UserControl

当用户点击每个按钮时,我使用ListBox来更改UserControl高度。是否有我需要做的事情,或ScrollBar上必须设置的一些设置,以使其注册表示其项目的WrapPanel的大小更改并显示ListBox.ItemsPanel什么时候需要?

编辑>>>

我已将问题跟踪到我在WrapPanel中使用的自定义ScrollBar。当我删除它或将其替换为标准Panel时,会在需要时显示ScrollBar。我从一篇关于creating custom WPF panels的好文章中获得了{{1}}的代码。任何人都可以看到文章中给出的代码中缺少什么,以及为什么它可能会阻止{{1}}显示?

2 个答案:

答案 0 :(得分:0)

我想知道ListBoxes是否正常做你期望的事情?如果您知道项目大小何时发生变化,您可以尝试在ListBox上调用InvalidateMeasure / Layout,只是为了看?

答案 1 :(得分:0)

我决定再次完全编写自定义WrapPanel代码,这次它正常工作!将新版本与之前版本进行比较时,我可以看到在测量计算中+ =缺少+ =因此Panel认为项目比实际要小得多...因此没有ScrollBar秒。

因此,如果您遇到此问题,请仔细检查您的测量代码。