这节来讲一下XAML中的属性元素,标记扩展,和注释。
属性元素
一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值:
<Button Content="I am Button" />
或者我们在后台通过标签的Name找到这个标签,用代码为其赋值。
属性元素则是为标签属性赋值的第三种方法。
顾名思义,属性元素是以元素的形式来表达一个标签的属性,它的语法如下:
<tag>
<tag.property>
value
</tag.property>
</tag>
上方给button的Content赋值的代码就可以改为以下形式:
<Button>
<Button.Content>
I am button
</Button.Content>
</Button>
我们前几节讲到,标签有非空和空标签之分,非空标签是可以有自己的内容的标签,所以我们为标签的内容赋值时,是可以省略属性元素的,以上代码就可以简化为:
<Button> I am button</Button>
系统会默认将“I am button” 赋值给Content,只有内容可以这么做,其它的属性若要使用属性元素赋值都是需要显示声明的。
你可能会疑问,属性标签看起来让我们的代码变得复杂了,当然,如果给元素的属性赋一些简单的值,我们不需要用属性元素,就像宽,高这样的属性,我们直接在元素内部赋值要简单的多,但是当我们遇到一些复杂的赋值情况,属性元素的优势就显示出来了,再拿button距离,我想让button的内容是一个图标加文字,这时候,显然在属性内部直接赋值是无法做到了,我们要么在后台使用代码,要么就需要用属性元素了,请看实例:
<Button> <WrapPanel> <materialDesign:PackIcon Width="16" Height="16" Margin="0 0 5 0" VerticalAlignment="Center" Foreground="White" Kind="Logout" /> <TextBlock TextWrapping="Wrap" Text="退出登录" FontSize="15" VerticalAlignment="Center" /> </WrapPanel> </Button>
效果如下:
在button内部放了一个WrapPanel元素,在这种情况下,属性元素是最简单合适的,毕竟C#代码是用来写逻辑的,不应过多涉及UI的编写。
标记扩展
标记扩展是xmal最特色的一个东西,它同样是给属性赋值的一种形式,但是标记扩展正如它的名字一样,是对属性赋值的扩展,它是我们后续要讲的MVVM模式中控件和数据的桥梁。
标记扩展是由大括号括起来的一些内容组成的,请看下面的代码:
<TextBlock x:Name="text_show" Text="你好"/> <Button Width="50" Height="30" Content="{Binding Text,Source={x:Reference text_show}}"></Button>
上述代码中{Binding Text,Source={x:Reference text_show}}就是标记扩展,它使用Binding命令和Source命令将button的内容跟TextBlock的Text属性绑定了起来。当我们更改TextBlock的Text属性的值的时候,Button按钮的值也会变,程序运行如下:
后续的MVVM章节,我们会讲控件的值与VM页面中的属性绑定,就是依赖标记扩展这个语法。当我们改变VM属性值时,前台的控件值就会变,这就是WPF与众不同的地方:数据驱动控件。初学者,可以先做了解,后续我们会持续接触标记扩展,而且也只有在代码中才能更好的理解标记扩展的强大。
注释
最后讲一下xaml中的注释。
使用<!-- 注释内容 --> 来注释一段xaml代码,但是需要注意一下几点:
1.注释只能出现在开始标签和结束标签之间,也就是只能出现在内容区域
2.不能注释标签的属性
3.不能嵌套使用注释
本节到此结束...