WPF学习笔记1——xaml基础
什么是xaml?
xaml是扩展应用标记语言的简写。它是用于实例化.Net对象的标记语言,主要用于构建wpf应用的界面。
在xaml中的所有元素都映射为.Net类的实例,元素的名字也完全对应于类的名字。
使用vs2019创建默认wpf应用程序,会自动生成App.xaml和MainWindow.xaml两个文件,以及对应的.cs文件,App.xaml.cs和MainWindow.xaml.cs
MainWindow.xaml
程序的主窗体,MainWindow.xaml内容如下:
<Window x:Class="WpfApp1.MainWindow"
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:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
Window 元素是一个顶级元素,在xaml文档里面只能有一个window元素。Page和Application元素也可以作为顶级元素。
Title,height,width为Window元素的属性。
Grid是一个子元素。
xaml浅析
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:WpfApp1"
在XAML中对象之间的层级关系,要么是并列要么是包含,全部体现在标签的关系上。那在后台类里,我们可以通过using引用其它名称空间,而在XAML代码里,我们通过xmlns特征来定义名称空间,格式如下:
xmlns:[可选的映射前缀]=“名称空间”。
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 采用键值对等
mc:Ignorable="d"
1、首先,命名空间d是我们在写xaml文件时看到控件的大小,比如d:DesignWidth="480"表示在编辑器里面我们看到的大小480,但是运行调试大小并不一定是480,它可能随着屏幕的大小而发生改变
2、而命名空间mc是跟兼容性有关的,mc:Ignorable="d"的意思就是告诉编辑器(vs2017)在项目运行时忽略命名空间d设置的大小
顶级元素都对应一个类,还有相应的命名空间,而在类的内部则是部署在顶级元素的其他元素。类的声明在相应的.cs文件中,比如MainWindow.xaml对应的MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();//加载各种组件
}
}
}
App.xaml
程序的主体,在Windows系统环境下,一个程序就是一个进程(Process)。一个GUI进程需要一个窗体作为主窗体。App.xaml文件的作用就是声明了程序的进程和主窗体会是谁。
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
XAML语法
xaml文档是一个树形结构
xaml中为对象属性赋值的语法:首先xaml代码不能编写程序的运行逻辑,当我们创建标签对象的时候对其属性进行必要的初始化才有使用意义。为对象属性赋值有两种方法
1.使用字符串进行简单赋值。即简单的Attribute=Value语法赋值,由于xaml语法限制,Value只能是字符串的值。
2.使用属性元素进行复杂赋值。属性元素指的是某个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性。
XAML对名称空间引用的语法
xmlns:[映射名]=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”