XAML是什么

  XAML是一种与.NET CLR紧密集成的声明性UI标记语言。XAML中的对象元素对应到CLR中的类型或结构。XAML命名空间对应到CLR中类的命名空间,元素类型则对应到CLR中的类型。XAML是xml的子集,因此严格遵循XML的语法规范。

新建一个WPF空项目,下面是默认生成的XAML结构

<Window x:Class="WpfApplication1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow">

    <Grid>

    </Grid>

</Window>

XAML代码组成:

1、  一个根元素<Window>和</window>标记。在XAML中,必须有且只能有一个根元素。

2、  紧接着根元素的XML命名空间的声明。在每个XAML文件中必须要具有两个命名空间。

  xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation 表示WPF命名空间,也就是XAML元素对应到CLR类的命名空间。

  xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml 表示XAML文件本身的命名空间,语法是xmlns:x,这个是x是命名的前缀可以是任意的字符。如果我们需要导入一些自定义的命名空间,那么我们就需要加上“:+自定义的形式”,这里微软导入了一个自定义的命名空间。

  使用其它命名空间的类型语法:

  xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"

  Prefix:用户指定希望在XAML文档中使用的命名空间的前缀,类似于XAML命名空间使用的x:前缀,可以指定任意的字符串。

  Namespace:是完整的.net命名空间名

  AssemblyName:程序集名称,不用指定.DLL扩展名。这个程序集必须被当前的WPF项目所引用。

3、下面是<Grid>标记,代表XAML文件的UI内容。

代码后置文件

使用项目模板创建一个窗体或页面时,VS会自动生成一个相应XAML文件扩展名在再加上.cs的代码后置文件。XMLA中通过使用x:class 语法关联到一个特定的后置类。

X:Class后置类指定为WpfApplication1.MainWindow,可以打开后置代码文件,看到一个名为WpfApplication1的命名空间,有一个MainWindow的类。X:class告诉XAML解析器,使用指定的名称来产生一个新的类,这个类派生自XAML跟元素类。因此在代码后置文件中可以看到MainWindow类继承自Window类。代码如下:

namespace WpfApplication1

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

}

}

特定的字符和空白

XAML严格遵循XML语法规范,在XML中,对特定的字符,比如& < > 等需要进行特殊处理,所以在XAML中也需要使用特定的代码来替换这些字符。

小于符号<:&lt;    <Button Content="小于号:&lt;"></Button>

大于符号>:&gl    <Button Content="大于号:&gt;"></Button>

And符合&:&amp;  <Button Content="And符号:&amp;"></Button>

引号””:&quot;     <Button Content="引号:&quot;"></Button>

在XAML中使用事件

XAML代码中事件的声明通常使用事件名=”事件处理方法名”,并且在后置代码中对指定的方法提供声明和实现。

XAML代码

<Window x:Class="WPFDemo.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:WPFDemo"

mc:Ignorable="d"

Title="MainWindow" Height="350" Width="525">

<StackPanel >

<!---定义按钮样式-->

<StackPanel.Resources>

<Style TargetType="{x:Type Button}">

<Setter Property="Height" Value="50"></Setter>

<Setter Property="Width" Value="200"></Setter>

<Setter Property="HorizontalAlignment" Value="Left"></Setter>

</Style>

</StackPanel.Resources>

<Button Content="点击我试试" Name="button1" Click="button1_Click"></Button>

</StackPanel>

</Window>

后置代码:

private void button1_Click(object sender, RoutedEventArgs e)

{

  MessageBox.Show("我是单击事件");

}

WPF 10天修炼 第二天- XAML语言的更多相关文章

  1. WPF 10天修炼 第七天- WPF资源、样式、控件模板

    WPF资源 对象资源 WPF允许在XAML标记的任意位置定义资源.比如在特定的控件.窗口或应用程序级别定义资源,WPF资源系统提供的对象资源有如下好处: 1.  高效:使用对象资源可以在一个地方定义而 ...

  2. WPF 10天修炼 第一天- 入门

    简介 WPF技术基于DirectX,完美的整合了矢量图形.2D或3D绘图技术.文件及多媒体技术.WPF将开发人员和设计人员的职责清楚的分离,提供了一种声明编程语言XAML.同时Expression B ...

  3. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

  4. WPF 10天修炼 第九天 - 几何图形

    几何图形 使用LineGeometry.RectangleGeometry.EllipseGeometry对象分别绘制直线.矩形.椭圆. 使用GeometryGroup可以绘制组合图形. <Wi ...

  5. WPF 10天修炼 第八天 - 形状、画刷和变换

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  6. WPF 10天修炼 第六天- 系统属性和常用控件

    WPF系统属性和常用控件 渐变的背景色 WPF中的前景色和背景色不同于传统Winform的设置,这些属性都是Brush类型的值.在XAML中,当为这些属性设置指定的颜色后将被转换为SolidColor ...

  7. WPF 10天修炼 第五天- 内容控件

    WPF内容控件 在WPF中,所有呈现在用户界面上的对象都称为用户界面元素.但是只有派生自System.Windows.Controls.Control类的对象才称为控件.内容控件通常是指具有Conte ...

  8. WPF 10天修炼 第四天- WPF布局容器

    WPF布局 WPF的窗口也就是Window类,是一个内容控件,该控件派生自ContentControl.内容控件有一个Content属性,该属性有一个限制,只能放置一个用户界面元素,或一个字符串.为了 ...

  9. WPF 10天修炼 第三天- Application全局应用程序类

    Application对象 当一个WPF应用程序启动时,首先会实例化一个全局唯一的Application对象,类似于WinForm下的Application类,用于控制整个应用程序,该类将用于追踪应用 ...

随机推荐

  1. Tornado实现多进程/多线程的HTTP服务

    用tornado web服务的基本流程 实现处理请求的Handler,该类继承自tornado.web.RequestHandler,实现用于处理请求的对应方法如:get.post等.返回内容用sel ...

  2. linux查看主板型号、CPU、显卡、硬盘等信息

    系统 uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # ...

  3. Vue(小案例_vue+axios仿手机app)_Vuex优化购物车功能

    一.前言         1.用vuex实现加入购物车操作 2.购物车详情页面          3.点击删除按钮,删除购物详情页面里的对应商品 二.主要内容 1.用vuex加入购物车 (1)在src ...

  4. Springboot集成Thymeleaf

    Thymeleaf 官方解释: Thymeleaf是一个用于web和独立环境的现代服务器端Java模板引擎. Thymeleaf的主要目的是将优雅的自然模板引入到您的开发工作流中——以使HTML可以在 ...

  5. ELK 构建 MySQL 慢日志收集平台详解

    ELK 介绍 ELK 最早是 Elasticsearch(以下简称ES).Logstash.Kibana 三款开源软件的简称,三款软件后来被同一公司收购,并加入了Xpark.Beats等组件,改名为E ...

  6. markdown 转义字符

    \\ 反斜杠 \` 反引号 \* 星号 \_ 下划线 \{\} 大括号 \[\] 中括号 \(\) 小括号 \# 井号 \+ 加号 \- 减号 \. 英文句号 \! 感叹号

  7. shell 生成任意大小文件

    $ dd if=/dev/zero of=junk.data bs=1M count=1 参数: if  (input file) of (output file) bs(block size) co ...

  8. 五十八、linux 编程——UDP 编程 广播

    58.1 广播介绍 58.1.1 介绍 广播实现一对多的通讯 它通过向广播地址发送数据报文实现的 58.1.2 套接字选项 套接字选项用于修饰套接字以及其底层通讯协议的各种行为.函数 setsocko ...

  9. E. Vanya and Balloons Codeforces Round #355 (Div. 2)

    http://codeforces.com/contest/677/problem/E 题意:有n*n矩形,每个格子有一个值(0.1.2.3),你可以在矩形里画一个十字(‘+’形或‘x’形),十字的四 ...

  10. C-Free 5.0 注册码

    用户名:123123 电子邮件:111@qq.com 注册码:mJ2Em9jdm7jGwYTpmp2H6KmehtvO 经过验证,可以正常注册.