2012-04-13 11 views
14

¿es posible ajustar contenido en un panel de distribución?envolviendo contenido en un stackpanel wpf

Sé que podemos hacer uso de un WrapPanel en su lugar. Pero por razones de modificación del código, debo hacer uso de un Stackpanel.

Entonces, ¿hay alguna manera de hacer que los artículos en un wrappanel se envuelvan después de decir 5 elementos ... Gracias!

+2

¿Por qué te tiene que usar un 'StackPanel' en lugar de un' WrapPanel'? – Rachel

+0

hay ciertas características del panel de pila que hemos personalizado ... así que tenemos nuestra propia virtualización compatible con nuestro panel de pila ... no quiero reinventar la rueda para virtualizar un panel de envoltura. – user1202434

Respuesta

14

Crear StackPanel anidados que contienen el número requerido de elementos.

En el siguiente ejemplo, tiene dos filas, ocupadas respectivamente por los elementos <StackPanel Orientation="Horizontal">, que a su vez contienen cinco elementos que se mostrarán horizontalmente uno al lado del otro.

<StackPanel Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal"> 
     <Item1 /> 
     <Item2 /> 
     <Item3 /> 
     <Item4 /> 
     <Item5 /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <Item1 /> 
     <Item2 /> 
     <Item3 /> 
     <Item4 /> 
     <Item5 /> 
    </StackPanel> 
</StackPanel> 
4

Dependiendo de su situación, podría usar un UniformGrid. Algunos ejemplos también se pueden encontrar en here.

Puede definirlo para ajustar después de 5 elementos como este.

<UniformGrid Columns="5"> 
<Button /> 
<Button /> 
<Button /> 
</UniformGrid> 

Cada artículo obtendrá, sin embargo, el mismo ancho, por lo que no está seguro si esto funcionará para usted.

0

No creo que pueda hacerlo sin un panel envolvente. Tal vez puedas intentar colocar un wrapPanel dentro del panel de pila: establece su ancho en el ancho real del panel de pila. Puede vincularlo como Width="{Binding ActualWidth, ElementName=StackPanel1}"

Pero esto será solo un truco, creo que el panel de envoltura es el más adecuado para sus necesidades.

7
<StackPanel> 
     <StackPanel.Style> 
      <Style TargetType="{x:Type StackPanel}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type StackPanel}"> 
          <WrapPanel/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </StackPanel.Style> 
    </StackPanel> 
+8

Lolz. Eso me irritaría. –

+3

:) ¡Te escucho, Ritch! ... pero es difícil decir por qué hay tanta insistencia en mantener el stackPanel sin ningún contexto en la pregunta. ¡Por lo tanto, allí! ¡Aquí hay un tipo de (StackPanel) con WrapPanel como un cáncer interno! –

+0

¿Esto es serio? –

9

Para mí, un simple WrapPanel funciona bien:

<WrapPanel Orientation="Horizontal" Width="500" /> 
No

dentro de un StackPanel o cualquier otro recipiente. Y el establecimiento de Ancho a un valor constante puede ser im superiores algunos casos, debido a la unión a ActualWidth puede prevenir reducción del tamaño (por ejemplo, cuando el control de los padres se ha reducido de tamaño, WrapPanel no lo es)

+0

esto es perfecto para cuando no tienes una cantidad fija de elementos por fila =) – mikelt21

Cuestiones relacionadas