Domanda

Questa domanda è uguale all'altra domanda senza risposta .

Quando Expander viene espanso il ListView esterno cresce per fare spazio ai contenuti degli espansori, ma quando Expander viene quindi compresso la vista non impone il ridimensionamento di ListView.

Codice ridotto, con note dopo:

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

Ho il ParameterGroupView in un ItemsControl o StackPanel perché in realtà ci sono molte voci ParameterGroupView . Lo scambio con un StackPanel non cambia il comportamento.

La rimozione del Boarder non influisce sul comportamento, ma averlo aiuta a mostrare il comportamento con un solo ParameterGroupView .

Ci possono essere molte sezioni Expander nel ListView esterno e Expander può avere molte entità all'interno del ListView .

Il ListView e Expander esterni devono sostituire un TreeView , utilizzato per avere un elenco di nodi comprimibili, ma il L'uso interno delle griglie di TreeView significa che gli elementi TextView sono stati schiacciati in modo orizzontale, come se si rimuovessero gli attributi etere HorizontalContentAlignment = " Stretch " .

Quindi, se c'è un altro modo per avvolgere / cablare tutto questo, sarò anche felice.

Questo è un problema perché i nostri blocchi TextView sono grandi e ci sono molti Expander .

Modifica: TextView viene utilizzato in quanto il codice è associato ai dati e quindi assemblato dinamicamente. Quindi qualsiasi sostituzione per ListView avrebbe bisogno di una qualche forma di ItemsSource

È stato utile?

Soluzione

Trovato la soluzione, che specifica già dove si trova la domanda.

ItemControl accetta un ItemsSource e si ridimensiona automaticamente. Quindi sostituendo i due ListView con ItemControl si ottiene il collasso nidificato.

Ma non c'è scorrimento, quindi avvolgendo ItemControl esterno con un ScrollViewer , viene riprodotto l'effetto desiderato completo.

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

Stavo testando con doppie espansioni nelle sezioni Border e Double Border.

Altri suggerimenti

La cosa più ovvia da fare qui è mettere gli espansori in un contenitore diverso da una 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>

Il contenitore si ridimensiona bene attorno al contenuto.

Se devi assolutamente averlo in un ListView (che è possibile), allora non conosco un modo per far ridimensionare facilmente un ListView una volta cresciuto (oltre a impostare dimensioni esplicite di tutto, che è goffo e inutile). In tal caso, è possibile che dovrai utilizzare una casella di riepilogo controllabile per visualizzare tutti gli espansori aperti o visualizzare il contenuto in un modo diverso (come in un popup, forse?) Se vuoi essere in grado di vederlo tutto a colpo d'occhio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top