2010-07-02 4 views
5

Ho un listbox definito così:WPF: WrapPanel in ItemsPanelTemplate espande larghezza elenco

<ListBox.ItemTemplate> 
     <DataTemplate> 
      <ItemsControl> 
       <!-- Contents here --> 
      </ItemsControl> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

mio problema è questo: Questo elenco è contenuto in un controllo griglia, e dovrebbe usare tutto lo spazio disponibile di quella cella in cui è contenuto, ma non dovrebbe forzare il genitore ad allocare PIÙ spazio. Ma ciò che accade è che una volta riempito il pannello di riepilogo, invece di avvolgere gli elementi nella riga successiva (come dovrebbe), espande semplicemente la larghezza della casella di riepilogo e nel processo impone anche la ridimensionamento della griglia principale.

Come posso ottenere il pannello involucro di rispettare la dimensione del suo genitore, e non costringerlo a espandere la sua dimensione?

Grazie in anticipo!

modifica: Un'altra cosa. Posso impostare la larghezza del wrappanel in modo esplicito per renderlo a capo, ma vorrei che il wrappanel abbia le stesse dimensioni della listbox.

risposta

17

Set ScrollViewer.HorizontalScrollBarVisibility="Disabled" e la WrapPanel andrà a capo.

<Grid> 
    <ListBox 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 
</Grid> 
+0

Sfortunatamente non ha funzionato ... Ho provato ad impostarlo su Nascosto e Disabilitato, e comunque espande lo spazio che usa. :( Si noti che il problema non è mai stato che la casella di riepilogo è diventata più grande della griglia era in (quindi una barra di scorrimento avrebbe mostrato), il problema è che la cella della griglia è in è allargata, e la casella di riepilogo con esso. – Hallgeir

+0

Oh, un'altra cosa: la griglia è contenuta in una griglia uniforme, può essere questo il problema? Forse l'uniformgrid non contiene la griglia e per questo si espande – Hallgeir

+0

Nella tua domanda hai menzionato wrappanel e non uniformgrid Il mio codice risolve il tuo problema mentre spiegato nelle tue domande su wrappanels. Se anche voi avete un problema con UniformGrid come ItemsPanel in listbox, si dovrebbe scrivere un'altra domanda. –

0

Ho risolto il problema .. il problema era (probabilmente) che alcuni dei contenitori che contenevano la mia casella di riepilogo era un po 'troppo generoso con l'allocazione di spazio per la mia casella di riepilogo. In ogni caso, non appena ho rimosso la barra di scorrimento per il resto dei miei contenitori (che contiene la mia lista), funziona come previsto. :)

Grazie per la risposta, è stato molto utile per risolvere questo.

0

avevo a che fare con questo problema in modalità di progettazione (miscela e VS 2013) e non ha avvolgere fino a quando ho aggiunto un po 'di tempo di progettazione dimensionamento alla pagina:

d: DesignHeight = "300" d: DesignWidth = "600"

0

Normalmente non vi avvolgerà come ci si aspetta fino a quando si imposta la barra di scorrimento orizzontale per portatori di handicap. Ora hai un wrappanel che in realtà include :)

ScrollViewer.HorizontalScrollBarVisibility="Disabled"