WPF XAML介绍

news2025/1/15 18:35:12

一、XAML 简介

        XAML是一种声明性标记语言,它简化了为.NET Framework应用程序创建UI的过程。在声明性XAML标记中创建可见的UI元素,可以折叠隐藏代码,使程序界面编程更加简单和简洁。
XAML直接以程序集中定义的一组特定后备类型表示对象的实例化。以文本表示时,XAML 文件是通常具有 .xaml 扩展名的 XML 文件。

        XAML对象元素通常声明类型的实例,也就是说XAML文件中的每个元素代表.NET中的一个类,并且XAML文件中的每个属性代表.NET类中的一个属性、方法或事件。后台文件.xaml.cs中部分类包含了XAML呈现层可以用的事件、方法和属性。

编写XAML代码是需要注意,声明一个XAML元素时,可以用Name(或者x:Name)属性为该元素指定一个名称,这样在C#代码里面才可以访问到此元素。

 XAML的优点:

        XAML可以设计出专业的UI和动画----好用。
        XAML不需要专业的编程知识,它简单易懂、结构清晰-----易学。
        XAML能使设计师直接参与软件开发,随时沟通、无需二次转化-----高效    
        另外一个大优点就是:它帮助开发团队真正的实现了UI和业务逻辑的剥离

接下来开始介绍XAML的语法,下面我们看一下这个图,方便我们理解;

XAML必须遵循的4大原则:

    XAML是大小写区分的,对象元素、属性元素和特性名称必须严格区分大小写。
    所有的属性值,无论它是什么数据类型,都必须包含在双引号中;例如:<Button Background="Blue"/>
    所有的元素都必须是封闭的,始终以左尖括号 (<) 开头,右尖括号 (>) 或者右尖括号 (/>) 结尾;例如<Border …/> <Border>…</Border>
    最终的XAML文件也必须是合适的XML文档。( XAML 是一种基于 XML 并遵循或扩展 XML 结构规则的语言。)

**************************************************************************************************************

二、XAML命名空间

        XAML里面的元素对应着.NET里面的类,但是只提供类名是不够的,XAML解析器还需要知道这个类位于哪个.NET名称空间,这样解析器才能够正确的识别XAML的元素。
xmlns特性是XML中的一个特殊特性,它专门用来声明命名空间。一旦声明一个命名空间,在文档中的任何地方都可以使用该命名空间。

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:local="clr-namespace:Testing.ViewModel"

**************************************************************************************************************

三、对象元素

        XAML的对象元素是指XAML中的一个完整的节点,一个XAML文件始终只有一个根元素,在下面的实例代码中是Page作为根元素,其他都是子元素。子元素可以包含一个或多个子元素。
对象元素语法是一种XAML标记语法,它通过声明XML元素将类或结构实例化。对象元素以左尖括号(<)开始,后面紧跟要实例化的类或结构的类型名称。类型名称后面可以有零个或多个空格,对于对象元素还可以声明零个或多个特性,并用一个或多个空格来分隔每个"特型名=值"这样的属性对。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    <Grid>
        <Button Click="Button_Click" >Click Me!</Button>
        <Button Click="Button_Click" >Click Me!</Button>
    </Grid>
</Page>

**************************************************************************************************************

四、属性

        XAML中的属性也可以使用多种语法设置,不同的属性类型也会有不同的设置方式,并不是全部的属性设置都是通用的,总的来说可以通过下面的4种方式来设置对象元素的属性:
       1.    使用属性语法;
       2.    使用内容元素语法;
       3.    使用集合语法(通常是隐式集合语法)。
       4.    并不是所有属性都适用取决于属性对象的特性。

<TextBlock Text="Frame Rate View" FontSize="20" Foreground="Red"/>

**************************************************************************************************************

五、附加属性

        附加属性是一种特定类型的属性,和普通属性的作用并不一样。这种属性的特殊之处在于,其属性值受到XAML中专用属性系统的跟踪和影响。附加属性可用于多个控件,但却在另一个类中定义。常用于控件布局。

**************************************************************************************************************

六、标记扩展

标记扩展是一个被广泛使用的XAML语言概念。通过XAML标记扩展来设定属性值。从而可以让对象元素的属性具备更加灵活和复杂的赋值逻辑。常用的有以下五种:

Binding(绑定)标记扩展,实现在XAML载入时,将数据绑定到XAML对象;
StaticResource(静态资源)标记扩展,实现引用数据字典(ResourceDictionary)中定义的静态资源。
ThemeResource(主题资源)标记扩展,表示系统内置的静态资源。
TemplateBinding(模板绑定)标记扩展,是现在XAML页面中,对象模板板顶调用。
RelativeSource(绑定关联源)标记扩展,实现对特定数据源的绑定。
在语法上,XAML使用大括号{}来表示扩展。例如:
<TextBlock Text = "{Binding Source = {StaticResource myDataSource}, Path = PersonName}"/>
这里有两处使用了XAML扩展,一处是Banding,另一处是StaticResource,这种用法称为嵌套扩展,TextBlock元素的Text属性的值为{}中的结果。当XAML编译器看到大括号{}时,把大括号中的内容解释为XAML标记扩展。
XAML本身也定义了一些内置的标记扩展,这类扩展包括:
x:Type:在XAML中取对象的类型,相当于C#中的typeof操作,这种操作发生在编译的时候。
x:Static:是用来把某个对象中的属性或域的值赋给目标对象的相关属性。
x:null:是一种最简单的扩展,自作用就是把目标的属性设置为null。
x:Array:表示一个.NET数组。x:Array元素的子元素都是数组元素,它必须与x:Type一起使用,用于定义数组类型。

**************************************************************************************************************

七、事件

大多数Windows 10 应用都是由标记和后台代码组成,在一个项目中,XAML作为.xaml文件来编写,然后用C#语言来编写后台代码文件。当XAML文件被编译时,通过XAML页面的根元素的x:Class属性指定的命名空间和类来表示每个XAML页对应的后台代码的位置。事件是XAML中常用的语法。
事件在XAML中的基础语法如下:
<元素对象 事件名称 = "事件处理"/>

**************************************************************************************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle Primavera Unifier组合管理器(Portfolio Manager)

目录 一&#xff1a;前言 二&#xff1a;介绍​​​​​​​ 一&#xff1a;前言 Oracle Primavera Unifier uDesigner Portfolio Manager 项目组合管理器是公司的预算员/计划工程师可以收集项目&#xff08;计划和执行中&#xff09;的成本和进度信息&#xff0c;并对“假设…

Webpack 5 超详细解读(六)

51.TerserPlugin 压缩 JS webapck中提供了压缩 js 代码的方式,可以移除无用代码、替换变量名等,减少编译后文件体积,提升加载速度。 不同mode 在 webpack配置文件 webpack.config.js中通过将 mode设置为 development或者 production,会对代码进行不同的处理。 可以发现,…

使用阿里云发送短信验证码

目录 一、用户注册登录流程 二、使用阿里云发送短信验证码 ⭐生成密钥 ⭐将密钥配置到项目中 ⚪新建properties文件并填入相应信息 ⚪pom配置 ​⚪ 测试代码 ⚪添加签名 ​⚪添加短信发送的模板 &#x1f4a7;验证码防盗刷监控 一、用户注册登录流程 二、使用阿里…

Linux服务器更改ssh连接端口

更改ssh连接端口 输入vim /etc/ssh/sshd_config编辑sshd配置 在键盘上按“I”键&#xff0c;进入编辑状态 添加新的远程服务端口&#xff0c;以 222 端口为例。在Port 22下面添加输入Port 222 建议&#xff1a;不要直接修改 22 端口&#xff0c;把Port 22前面的注释符号#删除…

股票买卖Ⅴ

题目描述 给定一个长度为 NNN 的数组&#xff0c;数组中的第 iii 个数字表示一个给定股票在第 iii 天的价格。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不能同时参与多笔交…

高精地图_语义地图_众包地图相关论文笔记

1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 20213d-Lidar构建long-term地图分为 SLAM模块&#xff08;每个session的点云地图通过关键帧构建&#xff0c;对不同session的关键帧进行anchor node检测&#xff0c;基于anchor帧构建的闭环因子实…

VSCode中Java程序入口的数据输入流的常用形式

1.前言 VSCode需要配置好Java环境&#xff0c;配置链接按官网教程即可&#xff1a;Getting Started with Java in Visual Studio Code VSCode目录./vscode下文件说明如下&#xff1a; setting.json &#xff1a; 配置vscode编辑器特性配置&#xff0c;同时基础Java Project中…

如何避免缓存穿透、缓存击穿、缓存雪崩?

缓存雪崩&#xff1a; 缓存雪崩是指缓存同⼀时间⼤⾯积的失效&#xff0c;所以&#xff0c;后⾯的请求都会落到数据库上&#xff0c;造成数据库短时间内承受⼤量请求⽽崩掉。解决方案&#xff1a; 缓存数据的过期时间设置随机&#xff0c;防⽌同⼀时间⼤量数据过期现象发⽣。…

微信小程序接入火山引擎埋点数据

1&#xff0c;文档中心-火山引擎 2&#xff0c;文档中心-火山引擎 3&#xff0c;文档中心-火山引擎 上面的链接是三个最重点的部分。 首先按照1的步骤安装SDK。npm install datarangers/sdk-mp 配置合法域名将https://mcs.volceapplog.com添加到小程序后台的“request合法域…

你能懂的 Reflect 反射

你能懂得 JS 之 Reflect 反射 上一篇文章《Proxy 代理对象使用详解即原理总结》我们详细介绍了 Proxy 代理对象的使用及其工作原理&#xff08;不了解的同学可以去看看哦&#xff09;&#xff0c;今天我们来聊聊它的好兄弟 Reflect 反射。 特点 Reflect 是一个内置全局对象&a…

[go学习笔记.第十六章.TCP编程] 4.项目-海量用户即时通讯系统-显示在线用户列表,群聊

1.实现功能-完成登录时能返回当前在线用户 用户登录后,可以得到当前在线用户列表 示意图如下: 步骤: (1).编写了server/processBlock/userManager.go package processBlockimport ("fmt" )//因为UserManager实例在服务器中有且只有一个,并且在很多地方都要使用,因…

博客系统前端页面

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 博客系统 前言 一.预期效果 博客列表页效果 博客正文页效果 博客登录页效果 博客编辑页效果 二.实现博客列表页 实现导航栏 实现版心 实现个人信息 …

【DELM分类】基于matlab麻雀搜索算法改进深度学习极限学习机数据分类【含Matlab源码 2235期】

⛄一、麻雀搜索算法改进深度学习极限学习机数据分类 1 深度极限学习机 深度极限学习机算法(Deep Extreme Learning Machine, DELM)又称多层极限学习机.存在N个训练样本&#xff0c;其中 2 麻雀搜索算法(SSA) 2020年&#xff0c;薛建凯等人提出了麻雀搜索算法.麻雀搜索算法是一…

python判断语句

一、布尔类型和比较运算符 布尔类型 只有两个结果 是 / 否 定义变量存储布尔类型数据&#xff1a; 变量名称布尔类型字面量 布尔类型的数据不仅可以通过定义得到也可以通过比较运算符比较内容得到 比较运算符&#xff1a; 二、if判断语句基本格式 程序中的判断&#…

如何鉴别一个成功的Scrum 教练?

成功的Scrum教练&#xff1a;如何鉴别一个成功的Scrum教练&#xff1f;了解更多关于优秀的Scrum专家的特征。 前言: 成功的Scrum 教练 - 我认为的九大标准 如何判别Scrum 教练是否是合格的&#xff1f;Scrum 教练成功的标准是什么&#xff1f;经常使用Confluence回顾性模板是不…

java创建线程的方式到底有几种?(详解)

创建线程的方式到底有几种&#xff1f;一&#xff0c;创建多线程的方式1&#xff0c;官方解释2&#xff0c;实现Runnable接口3&#xff0c;继承Thread类3&#xff0c;二者区别3.1&#xff0c;本质区别3.2&#xff0c;优先考虑使用第一种二&#xff0c;误以为是创建线程的几种新…

react(子传父、父传子)

目录 1. 父传子 数组/对象 的两种写法 2. 子传父&#xff1a; 3. 生成唯一id的库&#xff1a; 4. 对接收的组件进行验证 1. 父传子 数组/对象 的两种写法 function App() {const obj [{age:19},{age:19}]return (<div className"App"><header classNa…

Jmeter常用参数化技巧总结

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

uniapp之使用map组件显示接收过来的经纬度

目录 前言 效果图 提示 总代码 分析 1.显示自己位置的属性 2.markers 点标记 前言 由于项目的需求&#xff0c;我需要从主页面接收经纬度&#xff0c;并渲染至地图上面&#xff0c;同时呢&#xff0c;也要在该位置上显示图标标记点&#xff08;红色&#xff09;&#x…

兴业数金 测试 面试真题|面经

兴业数金测试服务中心技术面&#xff08; 一面二面&#xff09; 时间线流程 8.12一面&#xff08;30min&#xff09;->8.31邮件通知二面&#xff0c;填写职位申请表->9.2二面&#xff08;25min&#xff0c;二面需要用小鱼易连&#xff0c;需提前下载和注册&#xff09; …