列表框内的扩展器在崩溃时留下空白区域

时间:2010-05-21 19:13:41

标签: c# wpf listbox expander

我们有一个相当复杂的用户界面,它为我们提出了一些问题。

我有一个ListBox,其中包含一组DataItems。每个项目的DataTemplateExpander。标头是文字,Expander的内容是ListBoxListBox包含SubDataItems。每个SubDataItem The DataTemplateExpander

这是一个简化的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调整为正确的状态?

1 个答案:

答案 0 :(得分:3)

您是否尝试使用DockPanel作为根ListBox的{​​{1}} ItemsPanel Expander DockPanel.Dock="Top"