我们有一个相当复杂的用户界面,这给我们带来了一些问题。
我有一个包含一组数据项的ListBox
。每个项目的 DataTemplate
都是一个 Expander
。标题是文本,Expander
的内容是 ListBox
。 ListBox
包含子数据项。每个 SubDataItem 的 DataTemplate
都是一个 Expander
。
这是一个简化的 XAML,我在其中重现了该问题:
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Header}">
<ListBox ItemsSource="{Binding SubItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding SubHeader}">
<Grid Height="40">
<TextBlock Text="{Binding SubText}" />
</Grid>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
布局的生成方式存在问题。如果与 SubDataItem 对应的任何 Expander
被展开,则包含此 ListBox
的 ListBoxItem
(父 DataTemplate
) 正确地请求更多空间。所以我可以展开所有 SubDataItems 并正确查看我的数据。但是,当我折叠时,我之前要求扩展的空间仍然是空白,而不是被 ListBoxItem
回收。
这是一个问题,因为如果我有 10 个 SubDataItems,并且碰巧同时展开所有这些子数据项然后折叠,则会有大量空白浪费我的空间。
如何强制 WPF 将 ListBoxItem
的大小调整为正确的状态?
最佳答案
您是否尝试过使用 DockPanel
作为根 ListBox
的 ItemsPanel
,并拥有每个 Expander
DockPanel.Dock="Top"
?
关于c# - 列表框中的扩展器在折叠时留下空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884867/