XAML是啥?
XAML是微软创造的一种开发语言,即可拓展应用程序标记语言。扮演了HTML+CSS+JavaScript的角色。
创建一个默认的WPF程序
PS 实践:我们通常下载Visual Studio 并直接创建解决方案/项目来开发程序,实际上我们利用IDE针对我们的要开发的代码配置好了编译器的参数,并准备好了一些基本的源代码,省去我们手动配置)
默认状态下创建,我们会在当前解决方案下看到一个项目。其中包含以下分支:
1.Properties分支:里面的主要内容要用到的资源(图标、图片、静态的字符串)和配置信息
2.References分支:标记了当前的项目引用到的类库/其它项目
3.App.xaml分支:程序的主体,在Windows系统环境下,一个程序就是一个进程(Process)。一个GUI进程需要一个窗体作为主窗体。App.xaml文件的作用就是声明了程序的进程和主窗体会是谁。
4.Window1.xaml分支:程序的主窗体
剖析XAML代码
一个.xaml下会有一个.xaml.cs文件我们会看到.xaml.cs文件会有对应的分部类。是不是和winform很相似。拿Window1.xaml和Window1.xaml.cs两个文件来看。Window1.xaml.cs下有个MainWindow的分部类,按照之前WinForm的经验Window1.xaml是不是也对应的MainWindow这个分部类呢?我们先假定它是的,我们会看到代码里面有一行
Title="MainWindow" Height="450" Width="800"
我们在后台代码执行这样的操作:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var aa = this.Title; var bb = this.Height; var cc = this.Width; Debug.Print(aa.ToString() + "==========" + bb.ToString() + "============="+cc.ToString()); } }
得到的结果为:
MainWindow==========450=============800
这充分验证了我们的猜想:XAML标签声明一个元素时对应的内存中的一个对象,最外层的标签元素就是后台代码的分部类。
在XAML中对象之间的层级关系,要么是并列要么是包含,全部体现在标签的关系上。那在后台类里,我们可以通过using引用其它名称空间,而在XAML代码里,我们通过xmlns特征来定义名称空间,格式如下:
xmlns:[可选的映射前缀]="名称空间"。看下默认的XAML代码:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:MyFirstWpfApplication" x:Class="MyFirstWpfApplication.MainWindow" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> </Grid> </Window>
可以发现我们有5行代码以xmlns开头,也就是“引用了5个默认的名称空间”。
其中x:和mc:开头表示调用上面声明引用的名称空间。
x:它包含的类都是与解析XAML语言相关。
x:Class="MyFirstWpfApplication.MainWindow"表示将当前这个Window这个标签解析成C#类的类名。这也和我们开始验证的其为后台分部类一样。它是x:下的Attribute,只能用于根节点,且根节点的类型要与x:Class所指示的类型(且为分部类)一致。
补充 x名称空间下的其它Attribute:
x:Name:告诉编译器为这个标签生成对应的实例外还要为这个实例声明一个引用变量,变量名就是x:Name的值。还有将XAML标签所对应的对象的Name属性也设为x:Name的值,并注册到UI树上,方便查找。
x:FieldModeifer 设置元素可访问级别
x:key 采用键值对等
XAML语法
xaml文档是一个树形结构
xaml中为对象属性赋值的语法:首先xaml代码不能编写程序的运行逻辑,当我们创建标签对象的时候对其属性进行必要的初始化才有使用意义。为对象属性赋值有两种方法
1.使用字符串进行简单赋值。即简单的Attribute=Value语法赋值,由于xaml语法限制,Value只能是字符串的值。
2.使用属性元素进行复杂赋值。属性元素指的是某个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性。
XAML对名称空间引用的语法
xmlns:[映射名]=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”