面板是WPF中最重要的控件之一,用于存放其他控件,或者控制窗口/页面的布局。由于一个窗体只能放置一个子控件,因此面板用来隔成多块区域,这些区域各自可以放置一个控件或者面板(别忘了面板也是控件)。
面板分不同的形式,每一种都有其自己处理布局以及控制其子控件的方式。因此选择一种合适的面板对于实现你想要的形式和布局非常重要,尤其是你刚开始用WPF的时候,不是那么容易。下面的内容将简单地介绍每种面板,让你大致明白什么时候该用哪种。然后在后面的章节,我们将仔细介绍每一种面板。
Canvas画布
它是一个简单的面板,模仿了WinForms的处理方式。允许你指定每个子控件的具体坐标,以控制整个布局。但是不是很灵活,你必须手动移动子控件来保证它们按你设想的来排列。最好只在需要完全控制子控件的位置时,才使用该面板。
WrapPanel
该面板用于一个接一个的排列控件,以水平或者垂直方向,当空间不足时就会自动切换到下一行。比较适合用于需要水平或者垂直排列控件的情况。
StackPanel
StackPanel和WrapPanel非常像,不同的是它的子控件会尽可能地填充空间。同样的,它也可以水平或者垂直排列,但是无法改变子控件的宽度或者高度,它们会占据StackPanel面板的全部的宽或者高。适用于一排或者一列控件。
DockPanel
DockPanel用于把子控件锁定于顶部、底部、左边或者右边。默认情况下,如果最后一个控件没有被指定具体位置,就会填充剩余的空间。Grip面板也可以实现这个,但是DockPanel使用起来更简单。适用于锁定一个或多个控件到某一个部位,就像把窗口分成几个区域一样。
Grid
Grid面板也许是最复杂的面板类型了。Grip可以包含多行多列。你可以定义每一行的高度和每一列的宽度,通过一个像素值、可用空间的百分比或者自动分配这三种方式。自动分配会根据内容自动调整行高和列宽。Grip一般用于其他面板无法实现的情形,譬如如你需要很多列而且需要联合其他面板。
UniformGrid
UniformGrid和Grid相比,有一个很大的区别:所有行或者列尺寸必须统一。适用于不需要指定不同尺寸的行高和列宽的情形。