Assembly: PresentationFramework (in presentationframework.dll)
XML Namespace: http://schemas.microsoft.com/winfx/2006/xaml/presentation
The SetDock method changes the position of an element relative to other elements within the same container. Alignment properties, such as HorizontalAlignment, change the position of an element relative to its parent element.
If you set the LastChildFill property to true, which is the default setting, the last child element of a DockPanel always fills the remaining space, regardless of any other dock value that you set on the last child element. To dock a child element in another direction, you must set the LastChildFill property to false and must also specify an explicit dock direction for the last child element.
Panel elements do not receive focus by default. To compel a panel element to receive focus, set the Focusable property to true.
Note: The position of child elements of a DockPanel on the screen is determined by the Dock property of the respective child elements and the relative order of those child elements under the DockPanel. Therefore, a set of child elements with the same Dock property values can be positioned differently on the screen depending on the order of these children under the DockPanel. Child ordering effects positioning because the DockPanel iterates through its child elements in order, setting the position of each element depending on remaining space.
The following example creates a simple user interface (UI) framework using a DockPanel element. The DockPanel partitions available space to its child elements.
This example uses the Dock property, which is an attached property, to dock two identical Border elements at the Top of the partitioned space. A third Border element is docked to the Left, with its width set to 200 pixels. A fourth Border is docked to the Bottom of the screen. The last Border element automatically fills the remaining space.
// Create the application's main window mainWindow = new Window (); mainWindow.Title = "DockPanel Sample"; // Create the DockPanel DockPanel myDockPanel = new DockPanel(); myDockPanel.LastChildFill = true; // Define the child content Border myBorder1 = new Border(); myBorder1.Height = 25; myBorder1.Background = Brushes.SkyBlue; myBorder1.BorderBrush = Brushes.Black; myBorder1.BorderThickness = new Thickness(1); DockPanel.SetDock(myBorder1, Dock.Top); TextBlock myTextBlock1 = new TextBlock(); myTextBlock1.Foreground = Brushes.Black; myTextBlock1.Text = "Dock = Top"; myBorder1.Child = myTextBlock1; Border myBorder2 = new Border(); myBorder2.Height = 25; myBorder2.Background = Brushes.SkyBlue; myBorder2.BorderBrush = Brushes.Black; myBorder2.BorderThickness = new Thickness(1); DockPanel.SetDock(myBorder2, Dock.Top); TextBlock myTextBlock2 = new TextBlock(); myTextBlock2.Foreground = Brushes.Black; myTextBlock2.Text = "Dock = Top"; myBorder2.Child = myTextBlock2; Border myBorder3 = new Border(); myBorder3.Height = 25; myBorder3.Background = Brushes.LemonChiffon; myBorder3.BorderBrush = Brushes.Black; myBorder3.BorderThickness = new Thickness(1); DockPanel.SetDock(myBorder3, Dock.Bottom); TextBlock myTextBlock3 = new TextBlock(); myTextBlock3.Foreground = Brushes.Black; myTextBlock3.Text = "Dock = Bottom"; myBorder3.Child = myTextBlock3; Border myBorder4 = new Border(); myBorder4.Width = 200; myBorder4.Background = Brushes.PaleGreen; myBorder4.BorderBrush = Brushes.Black; myBorder4.BorderThickness = new Thickness(1); DockPanel.SetDock(myBorder4, Dock.Left); TextBlock myTextBlock4 = new TextBlock(); myTextBlock4.Foreground = Brushes.Black; myTextBlock4.Text = "Dock = Left"; myBorder4.Child = myTextBlock4; Border myBorder5 = new Border(); myBorder5.Background = Brushes.White; myBorder5.BorderBrush = Brushes.Black; myBorder5.BorderThickness = new Thickness(1); TextBlock myTextBlock5 = new TextBlock(); myTextBlock5.Foreground = Brushes.Black; myTextBlock5.Text = "This content will Fill the remaining space"; myBorder5.Child = myTextBlock5; // Add child elements to the DockPanel Children collection myDockPanel.Children.Add(myBorder1); myDockPanel.Children.Add(myBorder2); myDockPanel.Children.Add(myBorder3); myDockPanel.Children.Add(myBorder4); myDockPanel.Children.Add(myBorder5); // Add the parent Canvas as the Content of the Window Object mainWindow.Content = myDockPanel; mainWindow.Show ();
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="DockPanel Sample"> <DockPanel LastChildFill="True"> <Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Top"> <TextBlock Foreground="Black">Dock = "Top"</TextBlock> </Border> <Border Height="25" Background="SkyBlue" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Top"> <TextBlock Foreground="Black">Dock = "Top"</TextBlock> </Border> <Border Height="25" Background="LemonChiffon" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Bottom"> <TextBlock Foreground="Black">Dock = "Bottom"</TextBlock> </Border> <Border Width="200" Background="PaleGreen" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Left"> <TextBlock Foreground="Black">Dock = "Left"</TextBlock> </Border> <Border Background="White" BorderBrush="Black" BorderThickness="1"> <TextBlock Foreground="Black">This content will "Fill" the remaining space</TextBlock> </Border> </DockPanel> </Page>
By default, the last child of a DockPanel element fills the remaining unallocated space. If you do not want this behavior, set LastChildFill="False".
The compiled application yields a new UI that looks like this.
|How to: Create a DockPanel|| |
The following example creates and uses an instance of DockPanel by using code. The example shows you how to partition space by creating five Rectangle elements and positioning (docking) them inside a parent DockPanel. If you retain the default setting, the final rectangle fills all the remaining unallocated space.
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter EditionThe Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.