Stackpanel vs Dockpanel

Eine Weile musste ich nach dem wesentlichen Unterschied zwischen diesen beiden Controls suchen, aber schließlich wurde ich fündig. Im Folgenden werde ich versuchen die wesentlichen Unterschiede aufzuzeigen:

Zunächst mußte ich aber erst einmal das Silverlight Toolkit installieren, denn das Control DockPanel wurde aus dem Namespace System.Windows.Controls in das Silverlight Toolkit verschoben. Zusammen mit einigen anderen Controls: 3.1 DockPanel, WrapPanel, Expander, HeaderedContentControl, Viewbox, DataForm moved to the Silverlight

Anschließend entweder eine Referenz im Projekt auf System.Windows.Controls.Toolkit setzen oder aber folgende Zeile in die XAML-Datei integrieren: xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"

Jetzt kann das DockPanel-Control wie folgt hinzugefügt werden:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<controlsToolkit:DockPanel Width="420" Height="355" LastChildFill="False" Background="Gray">
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Top"></Button>
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Bottom"></Button>
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Left"></Button>
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Right"></Button>
</controlsToolkit:DockPanel>
</Grid>

So sieht das Ergebnis aus:

Vorteile des Dockpanels

Der Vorteil des DockPanels liegt unter anderem darin, dass die Elemente (in diesem Fall Buttons) an allen vier Seiten angedockt werden können (Oben, Unten, Links, Rechts), während beim Stackpanel lediglich nur zwei Seiten möglich sind (Oben->Unten, Links->Rechts).

Außerdem füllt bei einem DockPanel das verwendete Control automatisch den restlichen freien Platz aus:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<controlsToolkit:DockPanel Width="420" Height="100" LastChildFill="True" Background="Gray" >
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Left"></Button>
<Button Content="Button" Height="50" controlsToolkit:DockPanel.Dock="Right"></Button>
</controlsToolkit:DockPanel>
</Grid>

Ergebnis:
DockPanel LastChildFill auf true

Eine detaillierte Beschreibung dieses Controls findet Ihr hier (auf Englisch) :
http://www.silverlightshow.net/items/Using-the-DockPanel-in-Silverlight-2.aspx