而使得他们具备这样属性的,无疑就是外面的Grid布局控件赋予的,而在WPF中这样的功能实现叫做附加属性,是依赖属性的一个特殊的用法。关于依赖属性,在以后会详细的讨论。
第一个总结
WPF的XAML语法其实可以理解成另外一种形式的编程语言,其语法表现形式和XML类似,但是更严谨和更要求准确性。
XAML主要包括布局和控件,以此来构建各种形态的应用程序,除此之外,其中还有许多新的强大的东西,使得它更灵活和方便,例如依赖属性。
3.1 布局
WPF中的布局常用的主要包括五种:Canvas、Grid、StackPanel、DockPanel和WrapPanel。下面分别说一下这五种布局控件的使用。
1、 Canvas
要说Canvas,先看以下的xaml代码:
<Canvas>
<Button Name='btn1' Height='100' Width='100' Content='btn1' Margin='10'/>
<Button Name='btn2' Height='100' Width='100' Content='btn2' Margin='10'/>
</Canvas>
然后,查看在画布Canvas上面生成的画面,情况如下:

为什么不显示btn1?因为两个button重叠了起来,只显示最上面的控件(越接近结束标签 </Canvas>的控件,如果两个button的位置颠倒一下,显现出来的就是btn1).
Canvas的布局基本就和之前的Winform一致了,都是以左上角为中心,按照上下距离左上角的坐标为标准的。如果想要改变button的位置,就要给button控件设置Canvas.Left、 Canvas.Top、Canvas.Bottom 和Canvas.Right这四个属性。
所以Canvas得重点在绝对布局,对要求不太高的界面和比较固定的界面可以用这样的方式拖拽控件布局。
2、 Grid
WPF窗体程序的默认布局就是一个Grid,先看如下代码:
<Grid>
<Button Name='btn1' Height='100' Width='100' Content='btn1' Margin='10'/>
<Button Name='btn2' Height='100' Width='100' Content='btn2' Margin='10'/>
</Grid>
看到这里,你也许会说,这不是和上面的Canvas一样吗?但是真的一样吗?他们的窗体如下所示:

相信你一定看出来了,不错,和Canvas不同,Grid窗体默认的显示是以中心为基准的,不像Canvas布局是以左上角为标准。
那么Grid布局有什么样的好处呢?看下面这些代码:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height='*'/>
<RowDefinition Height='*'/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width='*'/>
<ColumnDefinition Width='*'/>
</Grid.ColumnDefinitions>
<Button Name='btn1' Height='40' Width='40' Content='btn1' />
<Button Grid.Row='1' Grid.Column='1' Name='btn2' Height='40' Width='40' Content='btn2' />
</Grid>










