带有嵌套扩展器的ListView不会折叠

时间:2009-11-30 06:36:51

标签: wpf listview expander

此问题与其他unanswered question相同。

扩展 Expander 时,外部 ListView 会增长,以便为扩展器内容腾出空间,但是当 Expander 随后会折叠视图时不会强制ListView调整大小。

缩小代码,后面有注释:

<!--<StackPanel>-->
<ItemsControl>

  <!-- ParameterGroupView -->
  <Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <ListView HorizontalContentAlignment="Stretch">
      <Expander Header="Expander A" IsExpanded="False">
        <ListView HorizontalContentAlignment="Stretch">

          <!-- TextView -->
          <TextBlock >Content A</TextBlock>
          <TextBlock >Content B</TextBlock>

        </ListView>
      </Expander>

    </ListView>
  </Border>

</ItemsControl>
<!--</StackPanel>-->

我在 ItemsControl StackPanel 中有 ParameterGroupView ,因为实际上有很多 ParameterGroupView 条目。交换到 StackPanel 不会改变行为。

删除 Boarder 不会影响行为,但让它只显示一个 ParameterGroupView 的行为。

外部 ListView 中可以有许多 Expander 部分, Expander 可以在内部 ListView <内部有许多实体/ em>的

外部 ListView Expander 将替换 TreeView ,用于获取可折叠节点列表,但 > TreeView 内部使用网格,意味着TextView项目被横向压缩,就像删除ether Horizo​​ntalContentAlignment =“Stretch”属性一样。

所以,如果有另一种方式来包装/连接所有这些,我也会很高兴。

这是一个问题,因为我们的 TextView 块很大,并且有很多 Expander

编辑: TextView 用作代码是数据绑定的,因此动态地放在一起。因此,ListView的任何替换都需要某种形式的 ItemsSource

2 个答案:

答案 0 :(得分:4)

找到解决方案,并详细说明问题的位置。

ItemControl 接受 ItemsSource 并自动调整大小。因此,用 ItemControl 替换两个 ListView 将获得嵌套折叠。

但是没有滚动,所以用 ScrollViewer 包裹外部 ItemControl ,再现了完整的预期效果。

<ScrollViewer
    VerticalScrollBarVisibility="Auto">
    <ItemsControl>
        <!-- ParameterGroupView -->
        <Border
            BorderBrush="Brown"
            BorderThickness="1"
            CornerRadius="4"
            Padding="4"
            Height="Auto">
            <ItemsControl
                HorizontalContentAlignment="Stretch">
                <Expander
                    Header="Expander A"
                    IsExpanded="False">
                    <ItemsControl
                        HorizontalContentAlignment="Stretch">
                        <!-- TextView -->
                        <TextBlock>Content A</TextBlock>
                        <TextBlock>Content B</TextBlock>
                    </ItemsControl>
                </Expander>
            </ItemsControl>
        </Border>
    </ItemsControl>
</ScrollViewer>

我正在测试边框中的双扩展器和双边框部分。

答案 1 :(得分:2)

这里最明显的做法是将扩展器放在listview以外的容器中:

<Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <StackPanel>

        <Expander Header="Expander A" IsExpanded="False">
            <ListView HorizontalContentAlignment="Stretch" MinWidth="100">
                <ListBox Name="listb"></ListBox>

                <!-- TextView -->
                <TextBlock >Content A</TextBlock>
                <TextBlock>Content B</TextBlock>

            </ListView>
        </Expander>
    </StackPanel>
</Border>

容器可以很好地调整内容。

如果你绝对必须在ListView中使用它(这是可能的)那么我不知道一种方法可以让ListView在它成长后轻松调整大小(除了设置整个事物的明确大小,这是笨拙的没有用)。如果是这种情况那么你可能需要使用可控制的列表框来显示所有打开的扩展器,或者以不同的方式显示内容(比如在弹出窗口中,可能?)如果你想能够看到它一目了然。