This article has been localized into Spanish by the community.
El control StackPanel
El StackPanel es muy similar al WrapPanel, pero con al menos una diferencia importante: El StackPanel no adapta el contenido. En lugar de eso lo estira en una dirección, permitiéndote apilar item tras item uno encima de otro. Primero intentémoslo con un ejemplo muy simple, muy parecido al que hicimos con el 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>
Lo primero que debes notar es como el StackPanel realmente no se preocupa de si hay o no espacio suficiente para el contenido. No adapta el contenido en modo alguno y no te provee automáticamente con la capacidad de hacer scroll (aunque puedes usar un control ScrollViewer para eso - más sobre eso en un capítulo posterior)
También puedes observar que la orientación predeterminada del StackPanel es Vertical, a diferencia del WrapPanel donde la orientación predeterminada es Horizontal. Pero al igual que el WrapPanel, esto se puede cambiar facilmente, usando la propiedad Orientation:
<StackPanel Orientation="Horizontal">
Otra cosa que probablemente notarás es que el StackPanel estira sus controles hijos por defecto. En un StackPanel alineado verticalmente, como el del primer ejemplo, todos los controles hijos quedan estirados horizontalmente. En un StackPanel alineado horizontalmente, todos los controles hijos quedan estirados verticalmente, como se ve arriba. El StackPanel hace esto estableciendo la propiedad HorizontalAlignment o VerticalAlignment en sus controles hijos a Stretch, pero puedes anularlo fácilmente si lo deseas. Echa un vistazo al próximo ejemplo, donde usamos la misma etiqueta como hicimos en el ejemplo anterior, pero esta vez asignamos valores a la propiedad VerticalAlignment para todos los controles hijos:
<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>
Usamos los valores Top, Center y Bottom para colocar los botones en un bonito patrón, sólo por diversión. Lo mismo puede hacerse por supuesto para un StackPanel alineado verticalmente, donde usarías la propiedad HorizontalAlignment en los controles hijos:
<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>
Como puede ver, los controles todavía van de arriba a abajo, pero en lugar de tener el mismo ancho, cada control es alineado a la izquierda, la derecha o el centro.