WPF基础——XAML语言
开始
xaml用于编写WPF的UI,其中每一个元素都是一个类的实例对象,标签内的属性赋值就是对该对象的属性进行赋值
xaml支持多种形式的属性设置,主要有以下三种方式
键值对赋值
1
<Button Content="Hello"/>
属性标签:每个标签看做一个对象,可嵌套它的属性标签设置属性,适用于复杂对象属性赋值
1 2 3 4 5
<Button> <Button.Content> <TextBlock Text="Hello"/> </Button.Content> </Button>
标签扩展:在
attr=value
形式上,使用{}
包裹value部分,在其中构造中介对象,通过中介对象赋予属性值,类名后跟的键值对是对中介对象的属性赋值,只有MarkupExtension
类的子类才支持标签扩展1 2
<!--在{}中构造对象,如构造Binding对象使用绑定,构造StaticResource使用静态资源等--> <TextBlock Text="{Binding ElementName=obj, Path=Value, Mode=OneWay}"/>
实际上,使用标签扩展是调用了类的构造器,因此可不指定属性名,按顺序赋值
1 2
<!--将Path赋值为Value--> <TextBlock Text="{Binding Value}"/>
X命名空间
X命名空间中包含解析xaml文件的内容,通常使用其中的元素和属性来标记xaml标签
x:Class
:指定编译生成的界面类合并到哪个后台类,只能用于根标签x:ClassModifier
:指定xaml界面类的访问级别,应与后台类的访问级别相同x:Name
xaml中每个元素都是一个实例对象,
x:Name
为xaml元素实例生成引用(类似创建id),若元素自带Name属性,则同时将x:Name
赋值给Name属性若元素有Name属性,则设置Name属性也能引用到元素实例,但有些元素没有Name属性,此时只能使用
x:Name
,为了统一,推荐仅使用x:Name
引用元素x:FieldModifier
:设置元素实例的访问级别,作为元素的属性使用x:Key
:用于标识资源字典中的资源,在C#中使用FindResource
方法获取x:Shared
:与x:Key
配合使用,值为true时,获取到的资源是同一个对象,否则是该资源的副本x:Type
:标签扩展,用于访问Type
类型对象,传入TypeName
属性x:Null
:标签扩展,用于将对象的某个属性设为nullx:Array
:标签扩展,可以构造一个数组,Type
属性指定数组元素的类型x:Static
:标签扩展,用于访问类的静态成员,传入类的静态成员
事件处理器
标签对象中有些属性接收一个处理函数,这种函数称为事件处理器,实现一个事件处理主要定义三个要素
- 指定事件
- 实现事件处理器
- 建立订阅
以Button点击为例
指定事件
1 2
<!--在x命名空间的Name属性指定控件的id,准备为MyButton的Click事件赋值--> <Button x:Name="MyButton" Click=""/>
实现事件处理器
1 2 3 4 5 6 7 8 9 10
namespace App { public partial class MainWindow : Window { // ... // 实现事件处理器 private void MyButton_Click(object sender, RoutedEventArgs e) { // statements; } } }
建立订阅:有两种方式,通过xaml设置或者通过C#代码设置
通过xaml设置
1
<Button x:Name="MyButton" Click="MyButton_Click"/>
通过C#代码设置
1 2
// Click是一个委托,将Click的功能委托到MyButton_Click this.MyButton.Click += new RoutedEventHandler(MyButton_Click);
引用类库
将类库引入到xaml的语法如下
1
xmlns:{自定义名称}="clr-namespace:{类库命名空间}";assembly={类库文件名}"
使用命名空间中的类
1
<自定义名称:类><自定义名称:类/>