2012-03-28 6 views
7

¿Es posible tener un <StackPanel> o etiquetas (o botones, lo que sea) que vayan horizontalmente a través de su control principal (por ejemplo, Window) y que llene todo el espacio permitido?Control padre horizontal de relleno de pilas

Por ejemplo si tuviera 3 controles

_ ventana width_ _

[1] _ _ [2] _ _ [3]

o 2 controles

_ ventana width_ _

[1] _ __ _ __ _ [2]

En cada caso, se está utilizando el ancho total de la ventana con cada control de borde justificado a la izquierda y a la derecha, respectivamente.

+1

Tal vez se puede utilizar un 'Grid' en su lugar? Con una 'Grilla' esto sería posible. – Vlad

+0

¿Entonces tienes un control que espaciará uniformemente a sus hijos horizontalmente? ¿Es eso correcto? –

+0

Gracias lo investigaré. – Ternary

Respuesta

15

Un StackPanel apilará controles, por lo que no es la respuesta corta. Eso no es lo que StackPanel está diseñado para hacer.

Puedes usar una grilla como sugirió Vlad. Algo como esto:

<Grid HorizontalAlignment="Stretch"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="auto"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="auto"/> 
     </Grid.ColumnDefinitions> 
     <Button Width="20" Height="20" Grid.Column="0"/> 
     <Button Width="20" Height="20" Grid.Column="2"/> 
     <Button Width="20" Height="20" Grid.Column="4"/> 
    </Grid> 
+0

Entonces, ¿necesito administrar dinámicamente agregar una columna para cada entrada nueva y colocar cada control en su propia celda? – Ternary

+0

En el caso de mostrar una colección dinámica de elementos, es posible que desee pensar en utilizar el control ListBox y establecer su ItemPanel en UniformGrid. Eso podría acercarse a lo que desea, pero no creo que obtendrá la justificación de la izquierda y la derecha en el primer y último elemento. –

-3
 StackPanel m_pstackpanel = (StackPanel)this.Parent; 
     m_pstackpanel.Children.Clear(); 
     keypadclasslist keypadWindow = new keypadclasslist(m_pLstReceiver); 
     m_pstackpanel.Children.Add(keypadWindow); 
Cuestiones relacionadas