我们有一个相当复杂的用户界面,它为我们提出了一些问题。
我有一个ListBox
,其中包含一组DataItems。每个项目的DataTemplate
为Expander
。标头是文字,Expander
的内容是ListBox
。 ListBox
包含SubDataItems。每个SubDataItem The 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
,则包含此ListBoxItem
的{{1}}(父ListBox
中的Expander.Content
)会正确请求更多空间。所以我可以扩展所有SubDataItems并正确查看我的数据。但是,当我崩溃时,我之前要求展开的空间仍为空白,而不是由DataTemplate
回收。
这是一个问题,因为如果我说10个SubDataItems并且碰巧同时展开所有这些SubDataItems然后崩溃,那么就会有大量的空白区域浪费我的房地产。
如何强制WPF将ListBoxItem
调整为正确的状态?
答案 0 :(得分:3)
您是否尝试使用DockPanel
作为根ListBox
的{{1}} ItemsPanel
Expander
DockPanel.Dock="Top"
?