1.XAML是什么?

XAML是扩展标记语言,是为了方便设计人员设计UI界面。具体关于XAML语法的讲解参考其他相关书籍。

 XAML每一个标签以<>开头,以</>结尾,作为标识中间可以放许多东西。

XAML是对XML的扩展

XAML注释:

<!---->

example:

<dog></dog>

<dog name ='s' age = 12 ......></dog>,其中 name ='s' age = 12 ...... 表示狗的属性,属性之间用空格分开,可以理解为Key 和 Value的对应。

如果dog这个对象还有其他东西,则需要在其中加入 .

example:

<dog>

  <lingdang color = 'red'>

  </lingdang>

</dog>

name ='s' age = 12 ......是属于狗的特有属性,但是<lingdang color = 'red'>不是狗特有的属性,属于包含的关系,所以XMAL语言的关键在于可以清楚的描述包含和被包含的关系。

同理,WPF最强悍的地方就是可以通过XMAL语言来描绘界面的层级关系,即包含和被包含的关系。具体关系如下图所示,和dog的关系类似,铃铛本身不属于狗,是我人为的添加进去的,就像按钮本身不属于window ,是我人为的添加进去的,对于窗口来说有尺寸大小,背景颜色等等其他属性,但是没有按钮属性。
我相信通过这样的描述可以清晰的解释XMAL 是如何描述窗体界面的。

2.为什么要使用XAML?

使用XMAL语言可以很好的描述窗口包含和被包含的关系。如果直接写代码,在阅读的时候不是特别直观。而且写起来特别累,这也不符合WPF设计软件的初衷。

3.在WPF中使用XAML

使用的是.Net6平台 WPF  

新建一个过程文件,其中默认的代码段如下:

<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>

在我们看来上述的XAML是描述界面,但是在背后的一套操作下来其实是讲XAML翻译成了C#代码,这其实是编译器在为我们干的一件事。即将XAML=>>C#语言。

而在写逻辑操作的时候使用C#语言。

如上图所示,每当新建一个窗口的时候,都对应的生成2个文件,一个是XAML另外一个是CS文件。每个文件的作用

XAML:负责界面的布局。

CS:负责逻辑操作的编写。

简单来理解就是一个负责貌美如花,发号命令,另外一个负责去做,一个主外一个主内。

XAML和CS文件在编译器中是CS包含在XAML中但是人家是2个单独的文件。如下图:

编译是将这2个文件融合:

4.那么是怎么融合的?

这个问题对于初学的我来说也是困扰。郁闷 ,我在阅读C#代码时候发现了

Partial 关键字,是个可扩展的类,相同的类名在同一个程序集下最终编译的时候会编译成一个整体,这不过现在一个是C#文件一个是XAML文件,其实通俗的讲可以将Mainwindow XAML 可以看做一个Mainwindow类。最终结果如下图所示:

编译器的工作就是将XAML=>>C#文件

2者之间如何保持联系 ?

<Window x:Class="WpfApp1.MainWindow"这句话就说明了,我在XAML中必须定义C#的类。描述了我的属性和哪一个Partial类联系在一起。

每一个窗口都需要一个构造函数如下:

那么这个构造函数做了什么事情,为什么需要构造函数?

通过进入InitializeComponent函数,发现这个函数里面做的事情很简单,就是将xaml文件读入进入后台。这样就建立了前台的UI和后台的代码部分的融合。

当然当我在XAML中也可以调用后台C#的代码:

例如: 我在C#中写了一个函数,我在XAML中也可以通过某一个事件去调用这个函数。即 后台代码可以被前台界面调用,这就是XAML的好处,利用XAML的可读性来描述UI界面,逻辑代码放置于C#中。

------------------------后期继续更新,欢迎大家一起相互学习探讨  ,作者会不断更新,有什么问题可以留言。

------------------------我始终相信一支独放不是春,万紫千红春满园。希望有更多优秀的小伙伴加入其中。

------------------------如果有写错的地方,欢迎大家指出来。

------------------------更新2022.12.25

第二章 --------------------XAML基础的更多相关文章

  1. java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...

  2. RxJava2实战--第二章 RxJava基础知识

    第二章 RxJava基础知识 1. Observable 1.1 RxJava的使用三步骤 创建Observable 创建Observer 使用subscribe()进行订阅 Observable.j ...

  3. 第二章 impala基础使用

    第二章 impala基本使用 1.impala的使用 1.1.impala-shell语法 1.1.1.impala-shell的外部命令参数语法 不需要进入到impala-shell交互命令行当中即 ...

  4. WPF从入门到放弃系列第二章 XAML

    本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...

  5. (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识

    开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...

  6. 《SQL 基础教程》第二章:查询基础

    这一章的结构如下: SELECT 语句基础 算术运算符和比较运算符 逻辑运算符 SELECT 语句可用于查询数据,并且可以设定条件来查询具有特定值的记录.条件的设定就需要算数运算符.比较运算符和逻辑运 ...

  7. 第二章----python基础

    概要:python是一种计算机编程语言,有自己的一套语法,编译器或者解释器负责把符合语法的程序代码翻译成CPU能识别的机器码,然后执行.python使用缩进来组织代码块,Python程序中大小写是敏感 ...

  8. 第二章 python基础(一)

    第一节 Python文件类型 源代码 Python源代码的文件以“py”为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 im ...

  9. 第二章 Python基础语法

    2.1 环境的安装 解释器:py2 / py3 (环境变量) 开发工具:pycharm 2.2 编码 编码基础 ascii ,英文.符号,8位为一个东西,2**8 unicode ,万国码,可以表示所 ...

  10. 第二章 XHTML基础

    1.一个网页,也就是一个XHTML文档,是由元素组成.元素定义了文本和图形在XHTML文档中的结构.XHTML文档的扩展名通常是.html或者htm. 2.XHTML元素使用XHTML标记定义,每个标 ...

随机推荐

  1. 一篇文章带你掌握主流办公框架——SpringBoot

    一篇文章带你掌握主流办公框架--SpringBoot 在之前的文章中我们已经学习了SSM的全部内容以及相关整合 SSM是Spring的产品,主要用来简化开发,但我们现在所介绍的这款框架--Spring ...

  2. Git的使用以及常用命令(详解)

    一. 版本控制工具 什么是版本控制系统? 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版 本修订情况的系统.版本控制系统不仅可以应用 ...

  3. Mysql主从配置步骤与各种错误

    测试环境: 2台腾讯云服务器.CentOS 7.2 64位,1G,lnmp. PHP:5.6:Mysql:5.5 两台干净的服务器 下面开始配置主服务器(master) 1.修改配置:  log-bi ...

  4. 如何使用IDEA创建一个简单的java工程?

    文章目录 1.创建新工程 1.1 新建项目 1.2 在src目录下创建package 1.3 在包下创建类 2.编写代码.运行项目 2.1 编写代码 2.2 运行结果 3.开心的从eclipse转移到 ...

  5. 齐博x1如果把万能表单直接插入到内容中去

    很多时候,你创建了一个万能表单可能像下面这个情况,在文章中加一个链接叫别人点击填表,其实这个很不人性化,用户也容易忽略. 其实你完全可以像下面这样,把表单直接引用到文章中来.给用户更直观的感觉 那是如 ...

  6. python读取文本数据某一列

    import codecs f = codecs.open('test1 - 副本.txt', mode='r', encoding='utf-8') # 打开txt文件,以'utf-8'编码读取 l ...

  7. LabVantage仪器数据采集方案

    LabVantage的仪器数据采集组件为LIMS CI,是一个独立的应用程序/服务,实现仪器数据的采集(GC.LC等带有工作站的仪器). 将仪器输出数据转换为LIMS所需数据并传输,使用Talend这 ...

  8. JS中对DOM元素的操作

    https://www.runoob.com/jquery/jquery-ref-html.html 1.each  遍历 //遍历所有class为checksingle的DOM元素 $(" ...

  9. 三十四、kubernetes证书介绍

    Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...

  10. awk变量

    awk变量 awk参数 参数 解释 -F 指定分割字段符 -v 定义或修改一个awk内部的变量 -f 从脚本文件中读取awk命令 对于awk而言,变量分为 内置变量 自定义变量 内置变量 解释 FS ...