2

我们有一个相当复杂的 UI,它给我们带来了一些问题。

我有一个ListBox包含一组数据项。每个DataTemplate项目的Expander. 标题是文本,内容ExpanderListBox. ListBox包含子数据项。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包含 this ListBoxExpander.Content在 parent 中DataTemplate)正确地请求更多空间。所以我可以展开所有 SubDataItems 并正确查看我的数据。但是,当我折叠时,我之前要求扩展的空间仍然是空白,而不是被ListBoxItem.

这是一个问题,因为如果我说 10 个 SubDataItems 并且碰巧同时扩展所有它们然后崩溃,那么就会有大量空白空间浪费我的房地产。

如何强制 WPF 将大小调整ListBoxItem为正确的状态?

4

1 回答 1

3

您是否尝试过使用DockPanel作为您的根的ListBox,并ItemsPanel拥有每个ExpanderDockPanel.Dock="Top"

于 2010-05-22T09:25:49.637 回答