Canvas是最精确的布局容器——绝对定位,此书作者不建议使用,以为控件的大小一般会随着内部字体图片的动态生成而自动变化,所以使用前三种布局是最好的选择,在这一点上,我也持同样意见。
Canvas使用Top/Bottom属性控制距离顶部/底部的高度;使用Left/Right属性控制距离左/右的距离。有趣的是,调整Form的大小,第二个TextBlock的位置会相应变化,但和底部以及右边的距离是不变的,代码见下:
<Canvas Background="Yellow">
<TextBlock Canvas.Left="10" Canvas.Top="20">Hello</TextBlock>
<TextBlock Canvas.Right="10" Canvas.Bottom="20">world!</TextBlock>
</Canvas>
<TextBlock Canvas.Left="10" Canvas.Top="20">Hello</TextBlock>
<TextBlock Canvas.Right="10" Canvas.Bottom="20">world!</TextBlock>
</Canvas>
此外,Canvas不会自动裁减超过自身范围的内容,即多出的内容会显示在Canvas外面,那是因为默认ClipToBounds="False";如果设置ClipToBounds="True",则会裁剪多于内容。
最后,联合使用ViewBox可以使自动布局控件调整大小(见下一节)。