У нас довольно сложный пользовательский интерфейс, который создает для нас некоторые проблемы.
У меня есть ListBox
, который содержит набор элементов данных. 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
до правильного состояния?