2010-07-02 16 views
5

Mam listbox zdefiniowane tak:WPF: WrapPanel w ItemsPanelTemplate rozszerza szerokość lista

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

Mój problem jest taki: Lista ta jest zawarta w kontroli sieci i powinien wykorzystywać całą dostępną przestrzeń tej komórki, ale nie powinien zmuszać rodzica do przydzielenia WIĘCEJ przestrzeni. Ale dzieje się tak, że gdy wypełni się panel zawijania, zamiast faktycznie owijać elementy do następnej linii (tak jak powinien), po prostu rozszerza szerokość listbox, a w procesie wymusza również zmianę siatki rodzica.

W jaki sposób mogę uzyskać, aby panel zawijania był zgodny z rozmiarem rodzica i nie zmuszał go do powiększania rozmiaru?

Z góry dziękuję!

edytuj: Jeszcze jedno. Mogę jawnie ustawić szerokość wrappanel, aby go zawijać, ale chciałbym, aby wrappanel miał taki sam rozmiar jak listbox.

Odpowiedz

17

Zestaw ScrollViewer.HorizontalScrollBarVisibility="Disabled" i owinąć WrapPanel.

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

Niestety to nie działało ... Próbowałem ustawić go na Hidden and Disabled, i nadal rozszerza przestrzeń, której używa. :( Zauważ, że problemem nigdy nie było to, że listbox stał się większy niż siatka, w której był (tak, że pokazywałby pasek przewijania), problem polega na tym, że komórka siatki, w której się znajduje, jest powiększona, a listbox z nią jest. – Hallgeir

+0

Oh, jeszcze jedna rzecz, siatka zawarta jest w uniformgrid, może to być problem? Może uniformgrid nie zawiera siatki iz tego powodu się rozwija – Hallgeir

+0

W swoim pytaniu wspomniałeś o wrappanelu, a nie o uniformgrid Mój kod naprawia twój problem wyjaśniono to w twoim pytaniu dotyczącym wrappaneli, jeśli masz problem z uniformgrid jako itemspanel w listach, powinieneś napisać kolejne pytanie: –

0

mam rozwiązany problem .. Problem był (prawdopodobnie), że niektóre z tych pojemników, które zawierały moje listbox był zbyt hojny przydzielenie miejsca na moim listbox. W każdym razie, jak tylko usunąłem pasek przewijania do reszty moich kontenerów (które zawiera moją listę), działa zgodnie z oczekiwaniami. :)

Dziękuję za odpowiedź, bardzo mi pomogła w rozwiązaniu tego problemu.

0

miałem do czynienia z tym problemem w trybie projektowania (mieszanki i VS 2013) i nie zawijać aż dodałem jakiś czas projektowania zaklejania do strony

D: DesignHeight = „300” D: DesignWidth = "600"

0

Zazwyczaj nie będzie się zawijać zgodnie z oczekiwaniami, dopóki nie ustawisz poziomego paska przewijania na wyłączony. Teraz masz wrappanel, który faktycznie się pakuje :)

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
Powiązane problemy