《深入浅出WPF》-刘铁猛学习笔记——XAML

article/2025/9/27 3:27:56

这里有个目录

  • XAML是什么?
  • 导人程序集和引用其中的名称空间
  • XAML的树型结构
  • Attribute (特性、标记、属性)
  • Property (属性)
  • 属性赋值
    • 字符串赋值
    • 使用属性元素( Property Element)进行复杂赋值
  • XAML 注释
  • 后记

XAML是什么?

XAML是微软公司创造的一种开发语言,XAML的全称是 Extensible Application Markup Language,即可拓展应用程序标记语言。
它由XML拓展而来,类似的,它的语法以这样标记语法为主,以下例子示例声明一个Button。

  <Button></Button>

借助XAML,我们可以实现界面和运行逻辑分离开来。我们可以使用标签来定义UI界面。事实上,XAML在编译时也会编成C#类,所以界面对应的.cs文件内的后台代码内要声明partial关键字,从而达到界面和运行逻辑分离的效果。

总结: XAML是微软公司创造的由XML拓展而来的界面开发的可拓展应用程序标记语言。

导人程序集和引用其中的名称空间

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

我们暂且不管后面一长串英文, 在上述代码中,x:是一个名称空间,xmlns:代表引用程序集,后面跟着的d即是程序集的代名称,后续要调用该程序集内的方法或者对象,使用以下语法方式即可,例如果要调用DesignInstance

<d:DesignInstance></d:DesignInstance>

同理,我们需要引用自己的dll,也是一样的写法。

XAML的树型结构

如下的界面布局
在这里插入图片描述
在XAML语法表示如下:
在这里插入图片描述
我们针对这个布局画图,会发现,XAML是树形逻辑结构。以< Window>
对象为根结点,一层一层向下包含。这种树形结构对于WPF整个体系都具有非常重要的意义,它不但影响着UI的布局设计,还深刻地影响着WPF的属性( Property)子系统和事件( Event)子系统等方方面面。

拓展:在实践编程中,我们经常要在这棵树上进行按名称査找元素、获取父/子结点等操作,为了方便操作这棵树,WPF基本类库里为程序员准备了 VisualTree HelperLogicalTreeHelper两个助手类( Helper Class),同时还在一些重要的基类里封装了一些专门用于操作这棵树的方法。

在这里插入图片描述

总结: XAML是自顶结点一层一层向下包含的树形逻辑结构。

Attribute (特性、标记、属性)

Attribute则是编程语言文法层面的东西。也就是说,Attribute只与语言层面上的东西相关,与抽象出来的对象没什么关系。因为 Attribute是为了表示“区分”的,所以可以把它译为“特征”。C#中的 Attribute就是这种应用的典型例子,我们可以为一个类添加 Attribute,这个类的类成员中有很多 Property。显然 Attribute只是用来影响类在程序中的用法.
像下面代码Window内的x:或xmlns:都是 Attribute,表示引用程序集路径,再次强调Attribute则是编程语言文法层面的东西,是给编译器看的。

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

Property (属性)

属性是面向对象的东西,比如一个对象是学生,那么他的名字、学号、班级等皆是属性。
比如下面Window内的Title、Height、Width皆是Window这个对象的属性。

<Window x:Class="WpfApplication.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"Title="MainWindow" Height="800" Width="800">
</Window>

Attribute与 Property是两个层面的东西。 Attribute是语言层面的东西、是给编译器看的,Property是面向对象层面的东西、是给编程逻辑用的

属性赋值

XAML中为对象属性赋值共有两种语法:

  • 使用字符串进行简单赋值
  • 使用属性元素( Property Element)进行复杂赋值

字符串赋值

<Window x:Class="WpfApplication.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"Title="MainWindow" Height="800" Width="800">
</Window>

像Title、Height、Width等属性右边的="属性值"即是以字符串的形式进行赋值。

使用属性元素( Property Element)进行复杂赋值

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><Grid><Button><Button.Content ><Image></Image></Button.Content></Button></Grid>
</Window>

属性元素,即是以元素的方式给属性赋值。像以上代码,即使给Button的Content属性赋值一个Image元素。

XAML 注释

<!-->这里写注释<-->

有几点需要注意的是
XAML注释只能出现在标签的内容区域,即只能出现在开始标签和结来标签之间
XAML注释不能用于注释标签的 Attribute
XAML注释不能嵌套

后记

本人不是大佬,只是道路先行者,在落河后,向后来的人大喊一声,这里有坑,不要过来啊!
纵然如此,依旧有人重复着落河,重复着呐喊······


个人博客网站 https://onebyone.icu/

技术交流Q群: 1012481075 群内有各种流行书籍资料
在这里插入图片描述
在这里插入图片描述

文章后续会在公众号更新,微信搜索 OneByOneDotNet 即可关注。

你的一分鼓励,我的十分动力,点赞免费,感恩回馈,喜欢就点赞评论吧。


http://chatgpt.dhexx.cn/article/6JlstlFB.shtml

相关文章

《C#入门详解》刘铁猛——Lesson31泛型、partial类、枚举、结构体

泛型类如下&#xff1a; 泛型接口&#xff0c;太常用了&#xff0c;如下&#xff1a; 实现这个泛型接口的类&#xff0c;也是泛型类&#xff0c;如下&#xff1a; 数据结构&#xff0c;基本上都是泛型的。 方法也可以是泛型的&#xff0c;而且泛型方法更常用&#xff0c;泛型方…

《C#入门详解》刘铁猛——Lesson10-11-12 操作符

纵向往下走&#xff0c;优先级依次降低。 []操作符声明数组&#xff1a; typeof操作符的用法&#xff1a; var声明隐式类型变量&#xff1a; new操作符声明实例&#xff1a; delegate——委托&#xff0c;使用该操作符声明一个匿名方法的示例如下&#xff1a; delegate现在已过…

《C#入门详解》刘铁猛——Lesson22-23LINQ

事件是基于委托的&#xff0c;事件是对委托类型的包装&#xff0c;事件是语法糖&#xff0c;委托类型才是完整格式&#xff0c;保护委托类型不会被外部随便调用。 就像属性是基于字段的&#xff0c;属性是字段的包装&#xff0c;用于防止字段被外部乱用。 三年后的视频。。。 …

刘铁猛《C#语言入门详解》——委托详解

委托详解 事件 using System; using System.Threading;namespace ConsoleAPP1 {class Program{static void Main(string[] args){Customer customer = new Customer(); //s事件拥有者Waiter waiter = new Waiter(); //事件的响应者// += 事件的订阅 customer.Order 事件 …

C#语言入门详解---委托(刘铁猛)

委托:函数指针的升级版,可以类比C语言中的函数指针进行理解 变量的本质就是以变量名所对应的内存地址为起点的一段内存,这段内存中存储的就是变量的数据,这段内存的大小由变量的数据类型决定。 函数代表算法,函数的本质是以函数名所对应的内存地址为起点的一段内存中,这…

刘铁猛《C#语言入门详解》1——详解类型、变量与对象

详解类型、变量与对象——上 C#是强类型语言&#xff0c;可使用dynamic实现弱类型语言的赋值操作&#xff1a; 数据类型 栈溢出&#xff1a;栈很小&#xff0c;分配过多内存会爆掉 内存监视器&#xff1a;winR,命令为&#xff1a;perform 详解类型、变量与对象——下 值类型在…

【C#】刘铁猛-C#语言入门详解听课笔记

叨叨在前&#xff1a; 这个视频共33集&#xff0c;油管和B站都可以看&#xff0c;B站有说有第二版本&#xff0c;但我在油管刘老师主页上没看见。 01 C#语言简介&#xff0c;搭建开发环境【略】 1、C#主要用来编写应用程序的 2、写程序步骤&#xff1a;编辑→编译[把语言转成…

【C#进阶学习】——刘铁猛老师

一、 C#语言入门详解&#xff1a;类、对象、类成员简介 1.1实例化对象 1.2引用变量&#xff08;可以对同一个对象进行操作和访问&#xff09; 1.3类 以属性为侧重点的类 以方法为侧重点的类 以事件为侧重点的类 1.4.静态成员与实例化成员 静态成员&#xff1a;立属于类…

AQS中公平锁和非公平锁的区别

场景&#xff1a;一个线程运行完毕&#xff0c;准备去等待队列中唤醒&#xff08;unpark&#xff09;线程。 公平锁&#xff1a; 当hasQueuedPredecessors 返回false时&#xff0c;则表示不需要去排队&#xff0c;会直接进行cas操作去修改state状态 hasQueuedPredecessors解析 …

AQS中的公平锁和非公平锁

正文 公平锁&#xff1a;多个线程按照申请锁的顺序去获得锁&#xff0c;线程会直接进入队列去排队&#xff0c;永远都是队列的第一位才能得到锁。 优点&#xff1a;所有的线程都能得到资源&#xff0c;不会饿死在队列中。 缺点&#xff1a;吞吐量会下降很多&#xff0c;队列里…

公平锁和非公平锁介绍

公平锁&#xff1a; 解释&#xff1a;多个线程按照申请锁的顺序执行&#xff0c;先来后到。 优点&#xff1a;所有的线程都能得到资源&#xff0c;不会饿死在队列中。 缺点&#xff1a;吞吐量会下降很多&#xff0c;队列里面除了第一个线程&#xff0c;其他的线程都会阻塞&a…

公平锁和非公平锁的详解

公平锁 加锁时考虑排队等待问题&#xff0c;按照申请锁的顺序&#xff0c;按照FIFO规则&#xff0c;先申请的线程先取得锁&#xff0c;其他线程进入队列等待锁的释放&#xff0c;当锁释放后&#xff0c;在队头的线程被唤醒。 非公平锁 加锁时不考虑排队等待问题&#xff0c;直接…

可重入锁的理解及公平锁和非公平锁的具体实现

可重入锁 首先结合以下两个例子理解以下可重入锁的概念。 /*** 可重入锁:* 1、可重复可递归调用的锁&#xff0c;在外层使用锁之后&#xff0c;在内层仍然可以使用&#xff0c;并且不发生死锁&#xff0c;这样的锁就叫做可重入锁。* 2、是指在同一个线程在外层方法获取锁的时…

公平锁与非公平锁的核心原理

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章是关于并发编程中AQS的独占模式和共享模式。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&#xff0c;面试中的大佬&#x1…

公平锁和非公平锁介绍,为什么要“非公平”?

什么是公平和非公平 公平锁指的是按照线程请求的顺序&#xff0c;来分配锁&#xff1b;而非公平锁指的是不完全按照请求的顺序&#xff0c;在一定情况下&#xff0c;可以允许插队。但需要注意这里的非公平并不是指完全的随机&#xff0c;不是说线程可以任意插队&#xff0c;而…

图解ReentrantLock公平锁和非公平锁实现

概述 ReentrantLock是Java并发中十分常用的一个类&#xff0c;具备类似synchronized锁的作用。但是相比synchronized, 它具备更强的能力&#xff0c;同时支持公平锁和非公平锁。 公平锁&#xff1a; 指多个线程按照申请锁的顺序来获取锁&#xff0c;线程直接进入队列中排队&a…

Java面试突击:公平锁和非公平锁有什么区别?

从公平的角度来说&#xff0c;Java 中的锁总共可分为两类&#xff1a;公平锁和非公平锁。但公平锁和非公平锁有哪些区别?孰优孰劣呢?在 Java 中的应用场景又有哪些呢?接下来我们一起来看。 正文公平锁&#xff1a;每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的&am…

浅谈ReentrantLock的公平锁和非公平锁的区别

前言 最近在看java并发编程这本书&#xff0c;已经看了点ReentrantLock的源码&#xff0c;以及之前有面试官问&#xff0c;公平锁和非公平锁有啥区别&#xff0c;我就只是从源码层面说了一下区别&#xff0c;但在性能上也有区别&#xff0c;今天就来说道说道。 公平与非公平 …

aqs原理初探以及公平锁和非公平锁实现

深入理解AQS 一&#xff0c;AQS1&#xff0c;ReentrantLock2&#xff0c;CAS3&#xff0c;AbstractQueuedSynchronizer3.1&#xff0c;FairSync3.2&#xff0c;NofairSync3.3&#xff0c;AQS中几个重要的相关参数3.4&#xff0c;Node 一&#xff0c;AQS AbstractQueuedSynchro…

图解ReentrantLock底层公平锁和非公平锁实现原理

&#x1f4bb;在面试或者日常开发当中&#xff0c;经常会遇到公平锁和非公平锁的概念。 两者最大的区别如下&#x1f447; 1️⃣ 公平锁&#xff1a;N个线程去申请锁时&#xff0c;会按照先后顺序进入一个队列当中去排队&#xff0c;依次按照先后顺序获取锁。就像下图描述的上…