Расширители внутри списка, оставляя пустое пространство при свертывании - PullRequest
2 голосов
/ 21 мая 2010

У нас довольно сложный интерфейс, который представляет для нас некоторые проблемы.

У меня есть 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 до правильного состояния?

1 Ответ

3 голосов
/ 22 мая 2010

Вы пробовали использовать DockPanel в качестве ListBox вашего корня ItemsPanel, и каждый Expander * DockPanel.Dock="Top"?

...