У нас довольно сложный интерфейс, который представляет для нас некоторые проблемы.
У меня есть ListBox
, который содержит набор DataItems. DataTemplate
для каждого элемента - Expander
. Заголовок текста, содержание Expander
является ListBox
. ListBox
содержит SubDataItems. The DataTemplate
для каждого SubDataItem - 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>
Существует проблема с созданием макета. Если какой-либо Expander
, соответствующий SubDataItem, раскрывается, ListBoxItem
, содержащий этот ListBox
(Expander.Content
в родительском DataTemplate
), правильно запрашивает больше места. Таким образом, я могу развернуть все SubDataItems и правильно увидеть мои данные. Однако, когда я рушусь, пространство, которое я ранее просил расширить, остается пустым, вместо того, чтобы быть исправленным ListBoxItem
.
Это проблема, потому что, если я скажу 10 SubDataItems и произойдет расширение их всех одновременно, а затем рухнет, то значительное количество пустого пространства будет тратить мою недвижимость.
Как заставить WPF изменить размер ListBoxItem
до правильного состояния?