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

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

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

相关文章

ES6 数值扩展

数值分隔符 允许给较长的数值添加分隔符&#xff0c;分割不没有间隔位数限制&#xff0c;不影响原值&#xff0c;不能在特殊符号前后。 let num 1_00_000_000; 检测数值是否有限 有限&#xff1a;true 无限&#xff1a;false Numbet.isFinite(10) // true Numbet.isFinite(…

PTA:三元组顺序表表示的稀疏矩阵转置Ⅱ

三元组顺序表表示的稀疏矩阵转置Ⅱ 题目输入格式输出格式输入样例输出样例 代码 题目 三元组顺序表表示的稀疏矩阵转置Ⅱ。设a和b为三元组顺序表变量&#xff0c;分别表示矩阵M和T。要求按照a中三元组的次序进行转置&#xff0c;并将转置后的三元组置入b中恰当的位置。 输入…

CCF-CSP真题《202305-5 闪耀巡航》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202305-5试题名称&#xff1a;闪耀巡航时间限制&#xff1a;5.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 西西艾弗岛旅游公司最近推出了一系列环绕西西艾…

pb:获取服务器时间、判断是否有重复数据

/*----------------------------------------------------------------------- * 函数名称:datetime gf_getsysdate(string as_dbms) * 功能描述:取得服务器的的日期时间(DateTime) * 参数含义:as_dbms 所使用的数据库DBMS * 返 回 值:datetime类型…

51单片机锅炉监控系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机锅炉监控系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 1.主要功能&#xff1a;讲解视频2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机锅炉监控系统仿…

hfut网络攻防技术阅读与综述

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 : 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少努力,撑得累…

SpringCloud-Alibaba之OSS对象存储服务

阿里云的 OSS 服务进行云端的文件存储 用户认证需要上传图片、首页轮播需要上传图片&#xff0c;OSS分布式文件服务系统可以提供服务。 一、依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>aliyun-oss-spring-boot-starter</…

idea文件比对

idea文件比对 1.项目内的文件比对2.项目间的文件比对3. 剪切板对比4. 版本历史(不同分支和不同commit)对比 1.项目内的文件比对 在项目中选择好需要比对的文件(类)&#xff0c;然后选择Compare Files Mac下的快捷键是Commandd&#xff0c; 这样的比对像是git冲突解决一样 …

4.1 构建onnx结构模型-Reshape

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以reshape 结点进行分析 方式 方法一:pytorch --> onnx 固定shape import torchcla…

Java21新特性

一、Java21新特性 1、字符串模版 字符串模版可以让开发者更简洁的进行字符串拼接&#xff08;例如拼接sql&#xff0c;xml&#xff0c;json等&#xff09;。该特性并不是为字符串拼接运算符提供的语法&#xff0c;也并非为了替换StringBuffer和StringBuilder。 利用STR模版进…

【Linux】多路IO复用技术③——epoll详解如何使用epoll模型实现简易的一对多服务器(附图解与代码实现)

在正式阅读本篇博客之前&#xff0c;建议大家先按顺序把下面这两篇博客看一下&#xff0c;否则直接来看这篇博客的话估计很难搞懂 多路IO复用技术①——select详解&如何使用select模型在本地主机实现简易的一对多服务器http://t.csdnimg.cn/BiBib多路IO复用技术②——poll…

k8s:二进制搭建 Kubernetes v1.20

目录 1 操作系统初始化配置 2 部署 etcd 集群 2.1 准备签发证书环境 2.2 生成Etcd证书 3 部署 docker引擎 4 部署 Master 组件 5 部署 Worker Node 组件 k8s集群master01&#xff1a;192.168.30.105 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集…

《进化优化》第6章 进化策略

文章目录 6.1 &#xff08;11) 进化策略6.2 1/5规则&#xff1a;推导走廊问题 6.3 μ1进化策略6.4 μλ和&#xff08;μ,λ&#xff09;进化策略6.5 自身自适应进化策略协方差阵自适应CMA 6.1 &#xff08;11) 进化策略 假设f(x)是随机向量x的函数,我们想要最大化适应度f(x).…

2023年辽宁省数学建模竞赛A题铁路车站的安全标线

2023年辽宁省数学建模竞赛 A题 铁路车站的安全标线 原题再现&#xff1a; 在火车站或地铁站台上&#xff0c;离站台边缘 1 米左右的地方都画有一条黄线(或白线)&#xff0c;这是为什么呢?   这条线称为安全线(业内称之为安全标线)&#xff0c;人们在候车时必须站在安全线以…

【移远QuecPython】EC800M物联网开发板调用网络API(使用SIM卡联网并调用高德地图API的定位坐标转换)

【移远QuecPython】EC800M物联网开发板调用网络API&#xff08;使用SIM卡联网并调用高德地图API的定位坐标转换&#xff09; 高德API使用方法&#xff1a; 文章目录 API相关配置SIM卡联网网络操作API调用 高德地图API产品介绍适用场景使用限制使用说明坐标转换 附录&#xff…

第12章_MySQL数据类型精讲

文章目录 1 MySQL中的数据类型2 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择演示代码 3 浮点类型3.1 类型介绍 本章的内容测试建议使用 MySQL5.7进行测试。3.2 数据精度说明3.3 精度误差说明 4 定点数类型4.1 类型介绍4.2 …

哈希表----数据结构

引入 如果你是一个队伍的队长&#xff0c;现在有 24 个队员&#xff0c;需要将他们分成 6 组&#xff0c;你会怎么分&#xff1f;其实有一种方法是让所有人排成一排&#xff0c;然后从队头开始报数&#xff0c;报的数字就是编号。当所有人都报完数后&#xff0c;这 24 人也被分…

D-Link账号密码泄露

构造payload&#xff1a; /getcfg.php SERVICESDEVICE.ACCOUNT&attackture%0D%0AAUTHORIZED_GROUP%3D1漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技…

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

Docker官网 Docker官网&#xff1a;https://www.docker.com/ Docker Hub官网&#xff1a;http://hub.docker.com/ 什么是Docker Docker 是一个开源的容器引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编…

ELK搭建以及使用教程(多pipiline)

1、环境准备 服务器&#xff1a;Centos7 Jdk版本&#xff1a;1.8 Es版本&#xff1a;7.12.1 kibana版本&#xff1a;7.12.1 logstash版本:7.12.1 IP地址安装软件192.168.50.211Es&#xff0c;Kibana&#xff0c;logstash 2、安装docker 安装步骤参考&#xff1a;https:…