当前位置: 首页 > news >正文

【WPF系列】- XAML语法规范

【WPF系列】- XAML语法规范

文章目录

  • 【WPF系列】- XAML语法规范
    • 一、概述
    • 二、对象元素语法
    • 三、特性语法(属性)
    • 四、特性值的处理
    • 五、枚举特性值
    • 六、属性和事件成员名称引用
    • 七、属性元素语法
    • 八、集合语法
    • 九、XAML 内容属性
      • XAML 内容属性值必须是连续的
    • 十、内容属性和集合语法组合
    • 十一、总结

一、概述

定义XAML语法术语是XAML语言规范中进行定义或引用。XAML是基于XML的语言,遵循或扩展XML结构规则。XAML是基于描述XML语言或XML文档对象模型时常用的术语。

XAML是一种标记语言。CLR是可实现运行时语言。XAML不是CRL运行一部分。仅是使用于WPF的XAML时实例化运行的一种表达形式。

二、对象元素语法

对象元素语法是 XAML 标记语法,通过声明 XML 元素来实例化 CLR 类或结构。 此语法类似于其他标记语言(如 HTML)的元素语法。 对象元素语法以左尖括号 (<) 开头,后面紧跟进行实例化的类或结构的类型名称。 零个或多个空格可以跟在类型名称后面,零个或多个属性也可以在对象元素上声明,使用一个或多个空格分隔每个属性名称=“值”对。对象元素必须满足一下条件之一:

  • 元素和标记必须以正斜杠 (/) 结尾,后面紧跟右尖括号 (>)。
  • 开始标记必须以右尖括号 (>) 结尾。 其他对象元素、属性元素或内部文本可以跟在开始标记后面。 此处可能包含的确切内容通常受元素的对象模型约束。 对象元素的等效结束标记也必须存在,与其他开始和结束标记对进行正确的嵌套和平衡。

实例一:

<TextBox Text="TextBox"  Width="120"/>

实例二:

<TextBox Text="TextBox"  Width="120"></TextBox>

三、特性语法(属性)

特性语法是 XAML 标记语法,它通过对现有对象元素声明特性来设置属性的值。 特性名称必须与支持相关对象元素的类的属性的 CLR 成员名称匹配。 特性名称后跟赋值运算符 (=)。 特性值必须是括在引号中的字符串。

若要通过特性语法进行设置,属性必须是公共属性,并且必须可写。 后备类型系统中属性的值必须是值类型,或者必须是在访问相关后备类型时可由 XAML 处理器实例化或引用的引用类型。

对于 WPF XAML 事件,作为特性名称引用的事件必须是公共的,并且具有公共委托。

四、特性值的处理

左和右引号中包含的字符串值由 XAML 处理器进行处理。 对于属性,默认处理行为由基础 CLR 属性的类型确定。

特性值会按此处理顺序,使用以下内容之一进行填充:

  1. 如果XAML处理器遇到大括号或派生自MarkupExtension的对象元素,则首先计算引用的标记扩展,而不是将值作为字符串进行处理,标记扩展返回的对象会用作值。 在许多情况下,标记扩展返回的对象会是对现有对象的引用,或者是将计算延迟到运行时的表达式,不是新实例化的对象。
  2. 如果使用特性化TypeConverter声明属性,或者使用特性化TypeConverter声明该属性的值类型,则特性的字符串值会作为转换输入提交到类型转换器,转换器会返回新的对象实例。
  3. 如果没有TypeConverter,则尝试直接转换为属性类型。此最终在 XAML 语言基元类型之间对分析器本机值进行直接转换,或者检查枚举中命名常量的名称(分析器随后会访问匹配值)。

五、枚举特性值

XAML 中的枚举由 XAML 分析器以内部方式进行处理,枚举的成员应通过指定枚举命名常量之一的字符串名称来指定。对于非标志枚举值,本机行为是处理特性值的字符串并将它解析为枚举值之一。无需如同在代码中一样,以“枚举.值”格式指定枚举。 而是仅指定值,枚举通过所设置的属性类型进行推断。 如果以“枚举.值”形式指定特性,则不会正确进行解析。

对于按标志枚举,行为基于 Enum.Parse方法。 可以通过用逗号分隔每个值,为按标志枚举指定多个值。 但是,不能合并不按标志的枚举值。

六、属性和事件成员名称引用

指定属性时,可以引用以针对包含对象元素实例化的 CLR 类型的成员形式而存在的任何属性或事件。或者可以引用独立于包含对象元素的附加属性或附件事件。

使用 typeName.event 部分限定名称对可通过默认命名空间访问的任何对象中的任何事件进行命名;此语法支持为路由事件附加处理程序,其中处理程序旨在处理从子元素路由的事件,但父元素在其成员表中也不包含该事件。 此语法类似于附加事件语法,但此处的事件不是真正的附加事件。 而是使用限定名称引用事件。

七、属性元素语法

属性元素语法是一种与元素的基本 XML 语法规则有一些差异的语法。 在 XML 中,特性的值是事实上的字符串,唯一可能的变化是所使用的字符串编码格式。 在 XAML 中,可以分配其他对象元素作为属性的值。 属性元素语法在默认情况下会启用此功能。 属性不是在元素标记中指定为特性,而是采用 elementTypeName.propertyName 形式,使用开始元素标记进行指定,在其中指定属性的值,然后结束属性元素。具体而言,语法以左尖括号 (<) 开头,后面紧跟属性元素语法包含在其中的类或结构的类型名称。 紧接着是单个点 (.),然后是属性的名称,再然后是右尖括号 (>)。 与特性语法一样,该属性必须存在于指定类型的已声明公共成员中。

属性元素语法实例:

<Button><Button.ContextMenu><ContextMenu><MenuItem Header="1">First item</MenuItem><MenuItem Header="2">Second item</MenuItem></ContextMenu></Button.ContextMenu>Right-click me!
</Button>

八、集合语法

XAML 规范要求 XAML 处理器实现标识值类型为集合的属性。 .NET 中的常规 XAML 处理器实现基于托管代码和 CLR,它通过下列方法之一标识集合类型:

  • 类型实现IList
  • 类型实现IDictionary
  • 类型派生自Array

如果属性的类型是集合,则推断的集合类型不需要在标记中指定为对象元素。 相反,旨在成为集合中的项的元素被指定为属性元素的一个或多个子元素。

<Style x:Key="SpecialButton" TargetType="{x:Type Button}"><Style.Triggers><Trigger Property="Button.IsMouseOver" Value="true"><Setter Property = "Background" Value="Red"/></Trigger><Trigger Property="Button.IsPressed" Value="true"><Setter Property = "Foreground" Value="Green"/></Trigger></Style.Triggers>
</Style>

九、XAML 内容属性

XAML 内容语法是一种仅在指定 ContentPropertyAttribute 作为类声明一部分的类上启用的语法。 ContentPropertyAttribute会引用作为该类型元素(包括派生类)的内容属性的属性名称。 由 XAML 处理器进行处理时,在对象元素的开始标记与结束标记之间找到的任何子元素或内部文本都会分配给该对象的 XAML 内容属性值。 允许为内容属性指定显式属性元素,但此用法通常不会出现在 .NET 参考的 XAML 语法部分中。 显式/详细技术偶尔对使标记清晰或是在标记样式方面有价值,但内容属性的意图通常是简化标记,以便可以直接嵌套直观上以父子形式相关的元素。 按照严格的 XAML 语言定义,元素上其他属性的属性元素标记不会分配为“内容”;它们以前按 XAML 分析器的处理顺序进行处理,不被视为“内容”。

  • XAML 内容属性值必须是连续的

AML 内容属性的值必须完全在该对象元素的其他任何属性元素之前或之后指定。 无论 XAML 内容属性的值是指定为字符串还是一个或多个对象,情况都是如此。 例如,以下标记不会进行分析:

<Button Margin="67,45,202,245"><Button.Background>Blue</Button.Background><Button.FontSize>Bold</Button.FontSize><Button.Foreground>#FFFFF5F5</Button.Foreground><Button.Content>这是一个有背景的按钮</Button.Content>
</Button>

十、内容属性和集合语法组合

若要接受多个对象元素作为内容,内容属性的类型必须明确为集合类型。 与集合类型的属性元素语法类似,XAML 处理器必须标识属于集合类型的类型。 如果元素具有 XAML 内容属性,并且 XAML 内容属性的类型是集合,则隐式集合类型不需要在标记中指定为对象元素,并且 XAML 内容属性不需要指定为属性元素。 因此,标记中的明显内容模型现在可以将多个子元素分配为内容。

<Window x:Class="_010_WPF_Demo.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:_010_WPF_Demo"mc:Ignorable="d"Title="MainWindow" Height="450" Width="900"><Grid ><StackPanel Width="100" Height="200"><Button>Button 1</Button><Button>Button 2</Button><Button>Button 3</Button></StackPanel></Grid>
</Window>

十一、总结

XAML语法规范大致有以上几种常用的方式,在实际应用中会根据不同的场景,选择恰当的方式组合完成应用程序的开发。

相关文章:

【WPF系列】- XAML语法规范

【WPF系列】- XAML语法规范 文章目录 【WPF系列】- XAML语法规范一、概述二、对象元素语法三、特性语法&#xff08;属性&#xff09;四、特性值的处理五、枚举特性值六、属性和事件成员名称引用七、属性元素语法八、集合语法九、XAML 内容属性XAML 内容属性值必须是连续的 十、…...

antv/g6之图布局及切换布局

一般图布局 目前为止&#xff0c;g6的一般图布局已经有13种了&#xff0c;如下: Random Layout&#xff1a;随机布局&#xff1b;Force2 Layout&#xff1a;G6 4.7.0 后支持力导向布局&#xff0c;与 gForce 相比性能更强&#xff1b;GForce Layout&#xff1a;G6 4.0 支持的…...

Wordpress plugin removes ‘/category‘

plugin removes /category from your category permalinks Remove Category URL – WordPress plugin | WordPress.org...

【大数据基础平台】星环TDH社区集群版本部署

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f…...

【Java】汉诺塔

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff08;河内塔&#xff09;&#xff1a;把圆盘从下面开始按大小顺序重新摆放到另一根柱子上&#xff0c;并且小圆盘上不能放大圆盘&#xff0c;在三根柱子之间一次只能移动一个圆盘。 汉诺塔规则 disk表示圆盘数一次只…...

Java实现对Html文本的处理

1.引入jsoup <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.8.3</version> </dependency> 2. html示例 示例代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1…...

Vue项目创建与启动(2023超详细的图文教程)

目录 一、下载node.js 二、下载vue-cli与webpack插件 三、项目初始化(项目配置详细信息) 四、项目启动 五、Vue项目工程结构&#xff08;扩展知识&#xff09; 一、下载node.js 1.检测是否已经安装过node.js 打开控制台,输入 npm -v如果有会显示对应版本 如果没有会显示…...

EtherCAT主站读取从站EEPROM抓包分析

0 工具准备 1.EtherCAT主站 2.EtherCAT从站&#xff08;本文使用步进电机驱动器&#xff09; 3.Wireshark1 抓包分析 1.1 报文总览 本文让主站去读取从站1字地址为0的EEPROM数据内容&#xff0c;主站读取从站EEPROM数据内容使用Wireshark抓包如下&#xff1a; 1.2 EEPROM读…...

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…...

汽车标定技术(四)--问题分析:多周期测量时上位机显示异常

目录 1.问题现象 2.数据流分析 ​​​​3.代码分析 3.1 AllocDAQ 3.2 AllocOdt 3.3 AllocOdtEntry 4.根因分析及解决方法 4.1 根因分析 4.2 解决方案 1.问题现象 在手撸XCP代码时&#xff0c; DAQ的实现是一大头痛的事情。最初单周期实现还好一点&#xff0c;特别是…...

Flink SQL时间属性和窗口介绍

&#xff08;1&#xff09;概述 时间属性&#xff08;time attributes&#xff09;&#xff0c;其实就是每个表模式结构&#xff08;schema&#xff09;的一部分。它可以在创建表的 DDL 里直接定义为一个字段&#xff0c;也可以在 DataStream 转换成表时定义。 一旦定义了时间…...

Tomcat免安装版修改标题名称和进程

tomcat免安装版启动后闪退问题 问题描述 在官网下载的tomcat免安装版的你安装完环境后发现启动闪退&#xff0c;tomcat启动依赖环境是JDK&#xff0c;所以需要tomcat对应版本的JDK支持。 tomcat8官网下载地址&#xff1a;https://tomcat.apache.org/ JDK环境官网下载地址&…...

vim搜索、替换tab

bibtex 中的缩进可能不一致&#xff0c;强迫症犯了想将&#xff1a; 缩进空格改 tab&#xff1b;行首的多个 tab 改为单个 参考 [1]&#xff0c;空格换 tab 可以&#xff1a; :set noexpandtab :%retab!行首的多个 tab 换单个&#xff1a; :%s/^\t\/\t/gReferences Replac…...

一文读懂ARM安全性架构和可信系统构建要素

一文读懂ARM安全性架构和可信系统构建要素 所谓可信系统&#xff08;trusted system&#xff09;&#xff0c;即能够用于保护密码和加密密钥等资产&#xff08;assets&#xff09;免受一系列的可信攻击&#xff0c;防止其被复制、损坏或不可用&#xff08;unavailable&#xf…...

Voice vlan、ICMP、单臂路由、mux-vlan

目录 一&#xff0c;Voice VLAN Voice vlan配置命令 一&#xff0c;问&#xff1a;已知网络中一台服务器的IP地址&#xff0c;如何找到这太服务器在哪台交换机的哪个接口上​编辑 思路&#xff1a; 二&#xff0c;ICMP协议 三&#xff0c;ICMP案例分析​编辑 四&#xf…...

TCP IP 网络编程(七) 理解select和epoll的使用

文章目录 理解select函数select函数的功能和调用顺序设置文件描述符设置监视范围及超时select函数调用示例 优于select的epoll基于select的I/O复用速度慢实现epoll时必要的函数和结构体epoll_createepoll_ctlepoll_wait基于epoll的服务器端 边缘触发和水平触发 理解select函数 …...

Linux accept和FD_xxx的使用

Linux socket accept功能的作用是在服务器端等待并接受客户端的连接请求。当有客户端尝试连接服务器时&#xff0c;服务器调用accept函数来接受该连接请求&#xff0c;并创建一个新的socket来与该客户端进行通信。 具体来说&#xff0c;accept函数被动监听客户端的三次握手连接…...

树结构及其算法-二叉运算树

目录 树结构及其算法-二叉运算树 C代码 树结构及其算法-二叉运算树 二叉树的应用实际上相当广泛&#xff0c;例如表达式之间的转换。可以把中序表达式按运算符优先级的顺序建成一棵二叉运算树&#xff08;Binary Expression Tree&#xff0c;或称为二叉表达式树&#xff09;…...

vue的rules验证失效,部分可以部分又失效的原因

vue的rules验证失效,部分可以部分又失效的原因 很多百度都有,但是我这里遇到了一个特别的,那就是prop没有写全,导致验证某一个失效 例子: 正常写法 el-form-item....多个省略<el-form-item label"胶币" prop"cost"><el-input v-model"form.…...

c#字符串转整数类型

将字符串转换为整数类型。为了方便&#xff0c;C#提供了一个内置的方法TryParse来实现这个功能 字符串&#xff08;String&#xff09;&#xff1a;表示一串字符的数据类型。整数&#xff08;Integer&#xff09;&#xff1a;表示不带小数点的数字。解析&#xff08;Parsing&a…...

【LeetCode】118. 杨辉三角

118. 杨辉三角 难度&#xff1a;简单 题目 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例…...

【Vue.js】Vue3全局配置Axios并解决跨域请求问题

系列文章目录 文章目录 系列文章目录背景一、部署Axios1. npm 安装 axios2. 创建 request.js&#xff0c;创建axios实例3. 在main.js中全局注册axios4. 在页面中使用axios 二、后端解决跨域请求问题方法一 解决单Contoller跨域访问方法二 全局解决跨域问题 背景 对于前后端分离…...

【车载开发系列】CRC循环冗余校验码原理

【车载开发系列】CRC循环冗余校验码原理 CRC循环冗余校验码原理 【车载开发系列】CRC循环冗余校验码原理一. CRC算法原理二. 生成多项式三. 多项式与其对应代码四. CRC码校验原理1&#xff09;发送端2&#xff09;接收端 五. CRC码原理方法1&#xff09;发送端生成CRC码方法2&a…...

数据库实验:SQL的数据更新

目录 实验目的实验内容实验要求实验步骤实验过程总结 再次书接上文&#xff0c;sql基础的增删改查 实验目的 (1) 掌握DBMS的数据查询功能 (2) 掌握SQL语言的数据更新功能 实验内容 (1) update 语句用于对表进行更新 (2) delete 语句用于对表进行删除 (3) insert 语句用于对表…...

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…...

大语言模型对齐技术 最新论文及源码合集(外部对齐、内部对齐、可解释性)

大语言模型对齐(Large Language Model Alignment)是利用大规模预训练语言模型来理解它们内部的语义表示和计算过程的研究领域。主要目的是避免大语言模型可见的或可预见的风险&#xff0c;比如固有存在的幻觉问题、生成不符合人类期望的文本、容易被用来执行恶意行为等。 从必…...

x264交叉编译(ubuntu+arm)

1.下载源码 https://code.videolan.org/videolan/x264 在windows下解压&#xff1b;复制到ubuntu&#xff1b; 2.进入源码文件夹-新建脚本文件 touch sp_run.sh 3.在sp_run.sh文件中输入 #!/bin/sh./configure --prefix/home/alientek/sp_test/x264/sp_install --enable-…...

SpringMVC 处理后端日期格式

通过扩展Spring MVC框架的消息转化器 在WebMvcConfiguration中扩展SpringMVC的消息转换器&#xff0c;统一对日期类型进行格式处理 WebMvcConfiguration /*** 扩展Spring MVC框架的消息转化器* param converters*/protected void extendMessageConverters(List<HttpMessag…...

Servlet详解

一.Servlet生命周期 初始化提供服务销毁 1.测试生命周期 package com.demo.servlet;import javax.servlet.*; import java.io.IOException;public class LifeServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {…...

遥遥领先,免费开源的django4-vue3前后端分离项目

星域后台管理系统前端介绍 &#x1f33f;项目简介 本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发&#xff0c;融合了typescript和element-plus-ui&#xff0c;提供暗黑模式和白昼模式两种主题以及全屏切换&#xff0c;开发bug少&#xff0c;简单易学&#xff0c…...