WPF常见布局容器

如果想让容器接受鼠标事件,则必须将Background的值设置为非空,设置为透明或其他颜色。
MeasureOverride 和 ArrangeOverride
StackPanel
可以设置水平和垂直方向布局,Orientation: Horizontal ,Vertical
该布局控件,在Grid中默认会占满控件。
将内部的子空间按照横向或竖向排列。
如果设置Horizontal,则横向排列,纵向会使控件尽量占满剩余的空间。
注意:StatckPanel设置成Horizontal时,子控件的HorizontalAlignment将不会起作用,子控件会靠左,而子控件VertialAlignment可以起作用。
StatckPanel设置成Vertical时,子控件的VertialAlignment将不会起作用,子控件会靠左,而子控件HorizontalAlignment可以起作用。
WrapPanel
横向或竖向排列子空间,如果空间不够,则会自动换行。
Grid
Grid.ShowGridLines设置为true时,则可以辅助看到行列分割线。
Grid中的一个单元格可以放很多子控件,是按顺序上下按Z轴堆叠在一起,后放置的控件位于最上方。
可以设置Row和Column,并且控制每行每列的宽度,值为:” 具体数值”,”Auto”,”*” , 默认值为 “*”
*会将父容器的空间按比例分配,不会考虑子控件的大小;
Auto会根据子控件的大小,自动分配行或者列的尺寸。
Grid容器中的子控件,如果没有设置Width和Height,也没有设置Horizontal和Vertical等属性,则默认会尽可能多的占用剩余控件。
Canvas
Canvas没有布局策略,如果子控件没有设置Width和Height,则其子控件都是按照各自的期望尺寸来显示
设置Canvas.ClipToBounds来控制是否允许内部的子空间显示在Canvas的外面。
Canvas中子控件,如果没有设置Width和Height:
像Button等的Control类会根据Content显示在Canvas的左上角,并且也不会随着Windows窗体或父容器的大小的改变而改变,HorizontalAlignment和VerticalAlignment也不会起作用。
像Rectangle等的Shape类不会显示在Canvas中,需要设置Width和Height才行,在其他容器中,不设置Width和Height会根据规则显示出来。
如果在Canvas中添加一个Grid,则Grid本身不会随着窗体大小的变化而变化,失去了重新Measure和Arrange的能力,其他的功能都正常。
Viewbox
如果Canvas中内部的控件随着窗体的变化而变化,则需要将Canvas放置到Viewbox中,且Canvas需要设置Width和Height才会显示,放入到Viewbox中后,Canvas里的Shape,仍需设置了Width或Height,才会显示,同时也会随着窗体大小的改变而改变。
HorizontalAlignment和VerticalAlignment也不会起作用,需要设置Canvas.Left和Canvas.Top等属性来定位子控件。
Canvas中适合放置Shape元素,以及添加一些动画,因为动画会影响控件本身的属性,从而可能会引起父容器的重排列。
UniformGrid
DockPanel
可以通过设置Dock来将子控件靠在容器的上下左右,默认LastChildFill是true,最后一个控件会尽量铺满剩余的空间,所以控件的添加顺序会受LastChildFill的影响
子控件的DockPanel.Dock为Left