XAML属性
开发工具与关键技术:Visual Studio 2017、WPF
撰写时间: 2019年8月5日
1、元素属性
XAML是一种声明性语言,XAML编译器会为每一个标签创建一个与之对应的对象。对象创建出来之后要对它的属性进行必要的初始化之后才有使用意义。
因为XAML语言不能写程序运行逻辑,所以一份XAML文档除了使用标签声明对象,另外一个功能就是初始化对象的属性了。
在XAML中为对象属性赋值共有两种方法:
1.使用字符串进行简单赋值;
2.使用属性元素进行复杂赋值。
2、使用标签的Attribute为对象属性赋值
我们已经知道,标签中的Attribute里面有一部分与对象的Property互相呼应。
我们首先学习使用字符串对Attribute进行简单赋值,将Rectangle填充成单一的颜色。
<Grid>
<Rectangle Name="Myrectangle"
Width="100" Height="100" Fill="Aqua">
</Rectangle>
</Grid>
在XAML编译器中,“Aqua” 这个字符串被翻译成了一个SolidColorBrush对象并赋值给了Myrectangle对象。翻译成C#代码就是:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
SolidColorBrush
colorBrush = new SolidColorBrush();
colorBrush.Color =
Colors.Aqua;
Myrectangle.Fill =
colorBrush;
}
3、使用TypeConverter类进行属性映射
在上面的例子中我们使用Attribute=Value语法赋值时,由于XAML语法限制,Value只能是一个字符串值。那么就会引发两个问题:
1.如果一个类能使用XAML语言进行声明,并允许它的Property与XAML标签的Attribute互相映射,那么就需要为这个类的Property准备适当的转换机制。
2.由于Value是一个字符串,所以其格式复杂程度有限。面对格式复杂的字符串就难以满足赋值需求。
我们举一个简单的栗子来演示第一个问题:下面的代码XAML编译器会给我们提示无法将字符串转换成Huamn类型。
<Window.Resources>
<my:Human x:Key="human" Child="DSA" />
</Window.Resources>