2009-11-30 21 views
7

Questa domanda è la stessa di questa altra unanswered question.ListView con Expander nidificato non compresso

Quando l'espansore viene espanso l'esterno ListView cresce per fare spazio per i contenuti espansori, ma quando il Espansore viene poi crollata la vista non forzare la ListView ridimensionare.

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é non v'è in realtà molti ParameterGroupView voci. Scambiare a StackPanel non modifica il comportamento.

Rimozione del Boarder non influisce sul comportamento, ma avendo aiuta mostrano il comportamento con un solo ParameterGroupView.

Ci possono essere molti espansori corpi nella esterno ListView, e il espansore può avere molte entità all'interno interna ListView.

L'esterno ListView e espansore è sostituire un TreeView, che è stato utilizzato per avere una lista di nodi comprimibili, ma il s' TreeView uso interno delle reti, le voci TextView stati schiacciati horizonatlly, lo stesso che se si rimuove l'etere HorizontalContentAlignment = "Stretch" attributi.

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

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

Modifica: TextView viene utilizzato come il codice è associato ai dati e quindi dinamicamente messo insieme. Quindi, qualsiasi sostituzione per ListView avrebbe bisogno di una qualche forma di ItemsSource

+0

Inoltre, non desideravo nessuna interazione di stile ListView con gli elementi di contenuto. Volevo davvero solo un controllo ridimensionamento dinamico che potesse essere vincolato. –

risposta

4

Trovato la soluzione e dettagli dove già nella domanda.

ItemControl accetta un ItemsSource e auto ridimensiona. Quindi, sostituendo i due ListView s con ItemControl s si verifica il collasso nidificato.

Ma non c'è scorrimento, in modo da avvolgere l'esterno ItemControl con un ScrollViewer, riproduce l'effetto desiderato completa.

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

Si eseguiva il test con espansori doppi nelle sezioni Border e Double Border.

+0

Appena testato questo nell'applicazione reale, e questo risolve il problema anche lì. –

2

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

Il contenitore ridimensiona intorno contenuti solo bene.

Se è assolutamente necessario averlo in un ListView (che è possibile), allora non conosco un modo per ottenere un ListView per ridimensionarlo facilmente una volta cresciuto (oltre ad impostare dimensioni esplicite dell'intera cosa, che è maldestra e non utile).Se è così, allora è possibile che tu debba usare una lista di controllo 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.

+0

Sì, sono d'accordo che il ListBox è in errore, ma ne ho bisogno, o qualcosa del genere, poiché supporta ItemsSource, dove - come StackPanel no. Il mio sistema attuale è completo, non statico. –

Problemi correlati