7

这个问题与其他未回答的问题相同。

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>-->

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

移除Boarder不会影响行为,但拥有它有助于仅使用单个ParameterGroupView显示行为。

外部ListView中可以有许多Expander部分,而Expander在内部ListView中可以有许多实体。

外部ListViewExpander用于替换TreeView,它用于具有可折叠节点的列表,但TreeView内部使用网格,意味着 TextView 项目被水平挤压,就像你删除 ether Horizo​​ntalContentAlignment ="拉伸”属性。

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

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

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

4

2 回答 2

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>

我在边框和双边框部分使用双扩展器进行测试。

于 2009-11-30T20:01:50.930 回答
2

这里要做的最明显的事情是将扩展器放在列表视图以外的容器中:

<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 在它长大后轻松调整大小(除了设置整个事物的显式大小,这很笨拙而且没用) . 如果是这种情况,那么您可能必须使用可控列表框来显示所有打开的扩展器,或者以不同的方式显示内容(比如在弹出窗口中,也许?)如果您希望能够看到它一目了然。

于 2009-11-30T16:23:36.767 回答