XAML中设置元素属性的语法常见,也不难理解,本文也基本来自帮助文档整理。但诚如题目所言,只是为了强调一下相关语法的术语,为后续可能的文章做铺垫。后文若提到相关语法,则术语替代不会显得突兀和难于理解,同时也无需啰嗦。
对于一般的XAML元素/对象,我们可使用以下4种语法,或其中的语法组合,来设置元素/对象的属性值。
1)使用Attribute语法。
2)使用Property Element语法。
3)使用Content Element语法。
4)使用Collection语法(通常是隐式的)。
1)Attribute语法:
<Rectangle Width="100" Height="100" Fill="Blue" />
2)Property Element 语法:
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<ImageBrush ImageSource="forest.jpg"/>
</Rectangle.Fill>
</Rectangle>
3)Content Element 语法:
<TextBlock>
Hello!
</TextBlock>
4)Collection 语法:
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<!-- GradientStopCollection标签通常可省略 -->
<GradientStopCollection>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
若再省略LinearGradientBrush.GradientStops标签,如下所示,则综合了Content Element语法和隐式Collection语法。
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush>
其他语法组合示例略,比如StackPanel等。
对于最简单最常见的Attribute语法,XAML解析器帮我们做了一件工作,就是把简单的字符串转换为了相应属性的类型,比如把"Blue"转换为Fill的类型Brush。那么相关的属性或类型应用了TypeConverterAttribute特性,后文详述。
对于Content Element语法,则该类(或其父类)在定义时,应用了ContentProperty特性,比如LinearGradientBrush的父类GradientBrush应用了特性[ContentProperty("GradientStops", true)]。因此在使用时,可省略<LinearGradientBrush.GradientStops>标签。