El siguiente tipo de Contenedor que sigue al Canvas en grado de complejidas
es el StackPanel. Es uno de los mas usados debido a su facilidad de uso gracias
a su simplicidad.
Este panel ordena los elementos hijos de forma secuencial, es decir de derecha
a izquierda o de arriba a abajo. Para ver un ejemplo sencillo podemos utilizar
el código fuente del ejemplo mostrado en el panel Canvas y modificar el
contenedor por un StackPanel. Hemos eliminado las propiedades adjuntas
donde se especificaba la posición realtiva de cada Textbox y añadido un color
de fondo para una mejor visualización. El código XAML quedaría de la
siguiente manera:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<StackPanel Name="mainCanvas" Background="Black">
<TextBox Text="1" Background="Red"/>
<TextBox Text="2" Background="GreenYellow" />
<TextBox Text="3" Background="Yellow"/>
<TextBox Text="4" Background="AliceBlue"/>
<TextBox Text="5" Background="Orange"/>
<TextBox Text="6" Background="White"/>
</StackPanel>
</Window>
Siendo el resultado por defecto el siguiente:
Pudiendo cambiar la orientación de los objetos hijos mediante la propiedad
Orientation.
DockPanel
Definido por las etiquetas <DockPanel></DockPanel>, que es el reemplazo de la propiedad Dock de los controles de versiones anteriores, ahora en WPF, se utilizan paneles para definir las áreas de específicas del formulario. Es rígido con los controles, al colocarlos no es simple manipularlos en su interior, por lo que se recomienda incluir un Canvas o un Grid por comodidad, la importancia de este control es para ubicar las áreas del formulario, las cuales se definen estableciendo las propiedades VerticalAlignment para definir el Top, Center, Bottom o Stretch, y la propiedad HorizontalAlignment para definir el Left, Right, Center, Stretch. Cabe mencionar que al utilizar Stretch en ambas propiedades da un resultado parecido a Fill, también es prudente mencionar que se debe utilizar la propiedad Margin para ubicar bien los paneles en sus límites con otros paneles.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<DockPanel Name="mainPanel">
<Label Content="Label 1 (Top)" DockPanel.Dock="Top" Background="Red" />
<Label Content="Label 2 (Left)" DockPanel.Dock="Left" Background="GreenYellow" />
<Label Content="Label 3 (Right)" DockPanel.Dock="Right" Background="Yellow" />
<Label Content="Label 4 (Bottom" DockPanel.Dock="Bottom" Background="AliceBlue" />
<Label Content="Label 5" Background="Orange" />
</DockPanel>
</Window>