Pregunta

Esta pregunta es la misma que esta otra pregunta sin respuesta .

Cuando el Expander se expande, el ListView externo crece para hacer espacio para el contenido de los expansores, pero cuando el Expander se contrae la vista no obliga a ListView a cambiar su tamaño.

Código reducido, con notas después de:

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

Tengo el ParameterGroupView en un ItemsControl o StackPanel porque en realidad hay muchas entradas ParameterGroupView . Cambiar a un StackPanel no cambia el comportamiento.

Eliminar el Boarder no afecta el comportamiento, pero tenerlo ayuda a mostrar el comportamiento con solo un ParameterGroupView .

Puede haber muchas secciones Expander en el ListView externo , y el Expander puede tener muchas entidades dentro del ListView interno .

El ListView y Expander externo es para reemplazar un TreeView , que se usaba para tener una lista de nodos plegables, pero el significa que los elementos TextView se aplastaron horizontalmente, de la misma manera que si elimina los atributos ether HorizontalContentAlignment = " Stretch " .

Entonces, si hay otra forma de concluir / conectar todo esto, también estaré feliz.

Esto es un problema porque nuestros bloques TextView son grandes y hay muchos Expander s.

Editar: TextView se utiliza ya que el código está vinculado a los datos y, por lo tanto, se agrupa dinámicamente. Por lo tanto, cualquier reemplazo para ListView necesitaría algún tipo de ItemsSource

¿Fue útil?

Solución

Encontró la solución, y detalla en qué parte de la pregunta ya.

ItemControl acepta un ItemsSource y cambia el tamaño automáticamente. Por lo tanto, al reemplazar los dos ListView s por ItemControl s se produce el colapso anidado.

Pero no hay desplazamiento, por lo que envolver el ItemControl externo con un ScrollViewer reproduce el efecto completo deseado.

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

Estaba probando con expansores dobles en las secciones Border y double Border.

Otros consejos

Lo más obvio aquí es colocar los expansores en un contenedor que no sea una vista de lista:

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

El contenedor cambia de tamaño alrededor del contenido muy bien.

Si absolutamente debe tenerlo en un ListView (que es posible), entonces no conozco una manera de hacer que ListView cambie de tamaño fácilmente una vez que ha crecido (más allá de establecer tamaños explícitos de todo, que es torpe y Inútil). Si ese es el caso, entonces es posible que tenga que usar un cuadro de lista controlable para mostrar todos los expansores abiertos, o mostrar el contenido de una manera diferente (¿tal vez en una ventana emergente, tal vez?) Si desea poder verlo todo de un vistazo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top