c# - 列表框中的扩展器在折叠时留下空白

标签 c# wpf listbox expander

我们有一个相当复杂的用户界面,这给我们带来了一些问题。

我有一个包含一组数据项的ListBox。每个项目的 DataTemplate 都是一个 Expander。标题是文本,Expander 的内容是 ListBoxListBox 包含子数据项。每个 SubDataItem 的 DataTemplate 都是一个 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>

布局的生成方式存在问题。如果与 SubDataItem 对应的任何 Expander 被展开,则包含此 ListBoxListBoxItem (父 DataTemplate) 正确地请求更多空间。所以我可以展开所有 SubDataItems 并正确查看我的数据。但是,当我折叠时,我之前要求扩展的空间仍然是空白,而不是被 ListBoxItem 回收。

这是一个问题,因为如果我有 10 个 SubDataItems,并且碰巧同时展开所有这些子数据项然后折叠,则会有大量空白浪费我的空间。

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

最佳答案

您是否尝试过使用 DockPanel 作为根 ListBoxItemsPanel,并拥有每个 Expander DockPanel.Dock="Top"

关于c# - 列表框中的扩展器在折叠时留下空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884867/

相关文章:

c# - 带有客户端证书的 HttpWebRequest 总是出现错误 "The request was aborted: Could not create SSL/TLS secure channel."

c# - 带有 Ninject 的 WPF 应用程序

wpf - WPF 中的数据网格

c# - 从 Java 启动 C# WPF 会导致 FileNotFoundExceptions

wpf - 是否可以在WPF的标签控件中重新排列标签项目?

c# - 如何以编程方式选择数据绑定(bind) ListBox 控件中的项目

wpf - 在 WPF 网格/列表中跨越多列的最佳方法?

c# - FxCop:异步方法的抑制消息

c# - 如何获取用户最近和/或经常打开的文件的列表?

c# - asp.net 如何检查一个项目是否存在于列表框中?