2010-07-02 5 views
5

Ich habe ein Listenfeld wie folgt definiert:WPF: WrapPanel in Itemspaneltemplate erweitert Liste Breite

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

Mein Problem ist folgendes: Diese Liste in einer Grid-Control enthalten ist, und sollte den gesamten verfügbaren Speicherplatz der Zelle verwenden, in der er enthalten ist, aber es sollte den Eltern nicht das Zuweisen von MEHR Speicherplatz erzwingen. Was aber passiert, ist, dass, sobald das Wrap-Panel voll ist, anstatt die Elemente tatsächlich in die nächste Zeile zu legen (wie es sollte), es erweitert nur die Breite des Listenfelds und zwingt das Eltern-Grid dazu, die Größe ebenfalls zu ändern.

Wie kann ich erreichen, dass das Wrap-Panel die Größe des übergeordneten Elements respektiert und nicht erzwingt, dass seine Größe vergrößert wird?

Vielen Dank im Voraus!

bearbeiten: Eine weitere Sache. Ich kann die Breite des Wrappens explizit festlegen, um es zu umbrechen, aber ich möchte, dass das Wrappel die gleiche Größe wie das Listenfeld hat.

Antwort

17

Set ScrollViewer.HorizontalScrollBarVisibility="Disabled" und die WrapPanel wird umbrechen.

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

Leider, das nicht funktioniert ... Ich habe versucht, sowohl sie versteckte und Disabled gestellt, und es dehnt sich immer noch den Raum nutzt. :( Beachten Sie, dass das Problem nie war, dass die Listbox größer als das Raster wurde, in dem es war (so eine Bildlaufleiste angezeigt würde), das Problem ist, dass die Grid-Zelle, in der es ist, vergrößert ist, und die Listbox mit. – Hallgeir

+0

noch eine Sache.Das Gitter ist in einem uniformgrid enthalten, kann das das Problem sein? Vielleicht uniformgrid enthält nicht das Gitter und deshalb expandiert. – Hallgeir

+0

In Ihrer Frage erwähnt Sie Wrappanel und nicht uniformgrid. Mein Code behebt Ihr Problem wie Sie Wenn Sie auch ein Problem mit uniformgrid als Itemspanel in Listboxen haben, sollten Sie eine andere Frage schreiben: –

0

Ich habe das Problem gelöst .. das Problem (wahrscheinlich) war, dass einige der Container, die meine Listbox enthalten, denen die Verteilung Platz für meine Listbox ein wenig zu großzügig war. In jedem Fall, sobald ich die Bildlaufleiste für den Rest meiner Container (die meine Liste enthält) entfernt, funktioniert es wie erwartet. :)

Danke für Ihre Antwort, es war sehr hilfreich bei der Lösung dieses Problems.

0

ich mit diesem Thema im Entwurfsmodus (Blend und VS 2013) zu tun hatte und es nicht wickeln, bis ich einige Entwurfszeit die Seite Sizing hinzugefügt:

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

0

Normalerweise wird es nicht wie erwartet umbrochen, bis Sie die horizontale Bildlaufleiste deaktiviert haben. Jetzt haben Sie eine WrapPanel, die tatsächlich hüllt :)

ScrollViewer.HorizontalScrollBarVisibility="Disabled"