This article has been localized into Italian by the community.
Il controllo StackPanel
Lo StackPanel è molto simile al WrapPanel, ma presenta almeno una differenza importante: lo StackPanel non interrompe il contenuto. Invece espande il contenuto in una direzione, permettendo di impilare gli elementi uno sull'altro. Proviamo ora un semplice esempio, simile a quello già fatto con il WrapPanel:
<Window x:Class="WpfTutorialSamples.Panels.StackPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StackPanel" Height="160" Width="300">
<StackPanel>
<Button>Button 1</Button>
<Button>Button 2</Button>
<Button>Button 3</Button>
<Button>Button 4</Button>
<Button>Button 5</Button>
<Button>Button 6</Button>
</StackPanel>
</Window>
La prima cosa che dovresti notare è come lo StackPanel non tiene conto se c'è o meno abbastanza spazio per il contenuto. Non interrompe il contenuto in nessun mode e non fornisce automaticamente la funzionalità di scorrerlo (puoi usare un controllo ScrollViewer per questa funzionalità - verrà approfondito in un capitolo successivo).
Avrai anche notato che l'orientamento di default di uno StackPanel è verticale, a differenza del WrapPanel dove l'orientamento di default era orizzontale. Ma proprio come il WrapPanel, questo può essere facilmente cambiato, utilizzando la proprietà Orientation:
<StackPanel Orientation="Horizontal">
Un'altra cosa di cui ti sarai accorto è che lo StackPanel di default espande i controlli figli. In uno StackPanel orientato verticalmente, come quello nel primo esempio, tutti i controlli figli vengono espansi orizzontalmente. In uno StackPanel orientato orizzontalmente, tutti i controlli figli vengono espansi verticalmente, come visto sopra. Lo StackPanel fa questo impostando sui controlli figli le proprietà HorizontalAlignment o VerticalAlignment su Stretch, ma questo può essere facilmente sovrascritto se si desidera. Dai un'occhiata al prossimo esempio, dove usiamo lo stesso markup che abbiamo usato nell'esempio precedente, ma questa volta impostiamo dei valori alla proprietà VerticalAlignment per tutti i controlli figli:
<Window x:Class="WpfTutorialSamples.Panels.StackPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StackPanel" Height="160" Width="300">
<StackPanel Orientation="Horizontal">
<Button VerticalAlignment="Top">Button 1</Button>
<Button VerticalAlignment="Center">Button 2</Button>
<Button VerticalAlignment="Bottom">Button 3</Button>
<Button VerticalAlignment="Bottom">Button 4</Button>
<Button VerticalAlignment="Center">Button 5</Button>
<Button VerticalAlignment="Top">Button 6</Button>
</StackPanel>
</Window>
Abbiamo usato i valori Top, Center e Bottom per posizionare i bottoni secondo uno schema. Lo stesso può ovviamente essere fatto per uno StackPanel allineato verticalmente, dove verrà usata la proprietà HorizontalAlignment dei controlli figli:
<Window x:Class="WpfTutorialSamples.Panels.StackPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="StackPanel" Height="160" Width="300">
<StackPanel Orientation="Vertical">
<Button HorizontalAlignment="Left">Button 1</Button>
<Button HorizontalAlignment="Center">Button 2</Button>
<Button HorizontalAlignment="Right">Button 3</Button>
<Button HorizontalAlignment="Right">Button 4</Button>
<Button HorizontalAlignment="Center">Button 5</Button>
<Button HorizontalAlignment="Left">Button 6</Button>
</StackPanel>
</Window>
Come puoi vedere, i controlli continuano ad andare dall'alto verso il basso, ma invece che avere la stessa larghezza, ogni controllo è allineato a sinistra, a destra o al centro.