Controls that derive from the
ContentControl class (such as
Window,
Button,
Label, and
ToolTip) have a property named
Content that you can set to almost any object. Commonly, this object is either a
string or an instance of a class that derives from
UIElement. The problem is you can set
Content to only
one object, which may be satisfactory for simple buttons, but is clearly inadequate for a window.
Fortunately, the Windows Presentation Foundation includes several classes designed specifically to alleviate this problem. These are collectively known as panels, and the art and science of putting controls and other elements on the panel is known as layout.
Panels derive from the Panel class. This partial class hierarchy shows the most important derivatives of Panel:
UIElement
FrameworkElement
Panel (abstract)
Canvas
DockPanel
Grid
StackPanel
UniformGrid
WrapPanel
The panel is a relatively recent concept in graphical windowing environments. Traditionally, a Windows program populated its windows and dialog boxes with controls by specifying their precise size and location. The Windows Presentation Foundation, however, has a strong commitment to dynamic layout (also known as automatic layout). The panels themselves are responsible for sizing and positioning elements based on different layout models. That's why a variety of classes derive from Panel: Each supports a different type of layout.
Panel defines a property named
Children used to store the child elements. The
Children property is an object of type
UIElementCollection, which is a collection of
UIElement objects. Thus, the children of a panel can be
Image objects,
Shape objects,
TextBlock objects, and
Control objects, just to mention the most popular candidates. The children of a panel can also include
other panels. Just as you use a panel to host multiple elements in a window, you use a panel to host multiple elements in a button or any other
ContentControl object.
Although automatic layout is a crucial feature in the Windows Presentation Foundation, you can't use it in a carefree way. Almost always, you'll have to use your own aesthetic sense in tweaking certain properties of the elements, most commonly HorizontalAligment, VerticalAlignment, Margin, and Padding.
Looking at them 1 by 1:
StackPanel