2010-07-02 52 views
5

he un cuadro de lista definida de esta manera:WPF: WrapPanel en ItemsPanelTemplate expande ancho de la lista

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

Mi problema es el siguiente: Esta lista está contenida en un control de la red, y debería usar todo el espacio disponible de esa celda, pero no debería obligar al padre a asignar MÁS espacio. Pero lo que sucede es que una vez que el panel se llena, en lugar de envolver los elementos a la línea siguiente (como debería), simplemente expande el ancho del cuadro de lista y en el proceso obliga a la cuadrícula principal a cambiar el tamaño también.

¿Cómo puedo conseguir que el panel de envoltura respete el tamaño de su elemento primario y no lo fuerce a expandir su tamaño?

¡Gracias de antemano!

editar: Una cosa más. Puedo establecer el ancho del wrappanel de manera explícita para que quede en blanco, pero me gustaría que el wrappanel tenga el mismo tamaño que el listbox.

Respuesta

17

El conjunto ScrollViewer.HorizontalScrollBarVisibility="Disabled" y el WrapPanel se envolverán.

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

desgracia que no funcionó ... He intentado tanto la pusieron a Ocultos y discapacitados, y todavía se expande el espacio que utiliza. :( Tenga en cuenta que el problema nunca fue que el listbox se volviera más grande que la cuadrícula en la que estaba (por lo que se mostraría una barra de desplazamiento), el problema es que la celda de la cuadrícula está ampliada y el cuadro de lista con ella. – Hallgeir

+0

Oh, una cosa más. La cuadrícula está contenida en una cuadrícula uniforme, ¿puede ser ese el problema? Tal vez uniformgrid no contenga la cuadrícula y debido a eso se expande. – Hallgeir

+0

En su pregunta usted mencionó wrappanel y no uniformgrid. Mi código corrige su problema como usted lo explicamos en su pregunta sobre wrappanels. Si también tiene un problema con uniformgrid como itemspanel en listboxes, debe escribir otra pregunta. –

0

He resuelto el problema .. el problema era (probablemente) que algunos de los recipientes que contenían mi cuadro de lista era un poco demasiado generoso con la asignación de espacio para mi cuadro de lista. En cualquier caso, tan pronto como eliminé la barra de desplazamiento para el resto de mis contenedores (que contiene mi lista), funciona como se esperaba. :)

Gracias por su respuesta, fue muy útil para resolver esto.

0

que estaba tratando con este problema en el modo de diseño (Blend y VS 2013) y no me envuelvo hasta que he añadido un poco de tiempo de diseño de tamaño a la página:

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

0

Normalmente no se ajustará como esperaba hasta que configure la barra de desplazamiento Horizontal en deshabilitada. Ahora usted tiene una WrapPanel que realmente envuelve :)

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
Cuestiones relacionadas