2012-03-28 15 views
7

E 'possibile avere uno <StackPanel> o etichette (o pulsanti, qualsiasi cosa) che si spostano orizzontalmente attraverso il controllo genitore (ad esempio Window) e farlo riempire tutto lo spazio consentito?Riempimento impilabile orizzontale Controllo padre

Per esempio, se ho avuto 3 controlli

_ finestra width_ _

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

o 2 controlli

_ finestra width_ _

[1] _ __ _ __ _ [2]

in ciascun caso viene utilizzata l'intera larghezza della finestra con ciascun controllo del bordo rispettivamente giustificato a destra ea sinistra.

+1

Forse si può usare un 'Grid' invece? Con una 'Grid' questo sarebbe possibile. – Vlad

+0

Quindi hai un controllo che distribuirà uniformemente i bambini orizzontalmente? È corretto? –

+0

Grazie esaminerò quello. – Ternary

risposta

15

A StackPanel impilerà i controlli, quindi no è la risposta breve. Questo non è ciò che uno StackPanel è stato progettato per fare.

È possibile utilizzare una griglia come suggerito da Vlad. Qualcosa di simile a questo:

<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

Allora, devo gestire dinamicamente l'aggiunta di una colonna per ogni nuova voce e posizionare ciascun controllo nella propria cella? – Ternary

+0

In caso di visualizzazione di una raccolta dinamica di elementi, è possibile pensare di utilizzare il controllo ListBox e impostare ItemPanel su UniformGrid. Ciò potrebbe avvicinarsi a quello che vuoi, ma non credo che otterrai la giustificazione destra e sinistra sul primo e sull'ultimo elemento. –

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