WPF ListBox未意识到其项目的大小已更改
我有一个WPF ListBox未意识到其项目的大小已更改,wpf,animation,user-controls,listbox,scrollbar,Wpf,Animation,User Controls,Listbox,Scrollbar,我有一个列表框,其中包含许多用户项,这些项是数据模板d,在列表框中显示为用户控件s。每个UserControl都可以扩展大小。首先,列表框足够大,可以将它们全部显示在未展开状态。我遇到的问题是,当许多UserControls一起展开时,它们会扩展到列表框的可见区域之外。列表框无法识别这一事实,即使设置为可见,也不会出现任何滚动条 我正在使用DoubleAnimations来更改UserControl高度,当用户单击每个按钮时。我是否必须做些什么,或者必须在列表框中设置一些设置,以使其注册表示其项
列表框
,其中包含许多用户
项,这些项是数据模板
d,在列表框
中显示为用户控件
s。每个UserControl
都可以扩展大小。首先,列表框
足够大,可以将它们全部显示在未展开状态。我遇到的问题是,当许多UserControl
s一起展开时,它们会扩展到列表框的可见区域之外。列表框
无法识别这一事实,即使设置为可见
,也不会出现任何滚动条
我正在使用DoubleAnimation
s来更改UserControl
高度,当用户单击每个按钮时。我是否必须做些什么,或者必须在列表框中设置一些设置,以使其注册表示其项目的用户控件的大小更改,并在需要时显示滚动条
s
编辑>>>
我已经找到了一个自定义的WrapPanel
,它是我在列表框.ItemsPanel
中使用的。当我移除它,或者用标准的WrapPanel
替换它时,滚动条会在需要时出现。我从一篇关于的好文章中获得了面板的代码。有人能看到文章中给出的代码中缺少了什么,以及为什么它可能会阻止滚动条的显示吗?我想知道列表框是否能正常完成您所期望的功能?如果您知道项目大小何时发生变化,您可以尝试调用列表框上的InvalidateMeasure/Layout,只是为了看看?我决定再次完整地编写自定义WrapPanel
代码,这次它工作正常!当将新版本与前一版本进行比较时,我可以看到测量计算中a+=中缺少a+,因此面板认为项目比实际小得多。。。因此没有滚动条
因此,如果您有此问题,请仔细检查您的测量代码。是否正在设置高度动画?在这种情况下,我看不出您的列表框没有理由不调整。你没有使用RenderTransform,是吗?我无法复制这个。您能为您的问题添加一些示例代码吗?我正在对自定义WrapPanel
的ArrangeOverride
方法中的ui元素.renderTransferrom
属性的子类
应用TranslateTransform
。这有什么不同吗?我尝试向编辑按钮添加一个点击处理程序,并调用listBox.Invalidate…()
和listBox.UpdateLayout()
,但没有效果。更多信息,请参阅我更新的帖子。