WPF_02_XAML
XAML(Extensible Application Markup Language的简写)是用于实例化.NET对象的标记语言。XAML对于WPF不是必须的。
XAML基础
XAML标准:
- XAML文档中的每个元素都映射为.NET类的一个实例。
- 与所有XML文档一样,可在一个元素中嵌套另一个元素。
- 可通过特性(attribute)设置每个类的属性(property)。
XAML名称空间
xmlns特性是XML中的一个特殊特性,专门用来声明名称空间。
- http://schemas.microsoft.com/winfx/2006/xaml/presentation 是WPF核心名称空间,包含所有WPF类。
- http://schemas.microsoft.com/winfx/2006/xaml/xaml 是XAML名称空间,包含各种XAML实用特性,这些特性可影响文档的解释方式。
标记扩展
如果将属性值设置为一个已经存在的对象,或者将一个属性绑定到另一个控件来动态地设置属性值,这些情况都需要使用标记扩展-非常规的方式设置属性的专门语法。
标记扩展可以用于嵌套标签或 XML 特性中,当用在特性中时总是被花括号{}包围起来。
<Button x:Name="btn" Foreground="{x:Static SystemColors.ActiveCaptionBrush}">
上面例子中,标记扩展是 StaticExtension 类(约定在引用扩展类时可以省略最后一个单词 Extension)。
所有标记扩展都继承自 System.Windows.Markup.MarkupExtension 。
附加属性
附加属性用于多个控件但在另一个类中定义的属性,在WPF中常用于控件布局。附加属性不是真正的属性,实际上被转换为方法调用。
<!--Grid.SetRow(txt,2)-->
<TextBox x:Name="txt" Grid.Row="2">
</TextBox>
附加属性时WPF的核心要素,充当通用的可扩展系统。如果选择将该属性作为基类的一部分,不仅会使公共接口变得十分杂乱,而且也不能添加需要新属性的新类型的容器。
嵌套元素
XAML让每个元素决定如何处理嵌套的元素。
- 如果父元素实现了 IList 接口,解析器将调用 IList.Add() 方法,并且为该方法传入子元素作为参数
- 如果父元素实现了 IDictionary 接口,解析器将调用 IDictionary.Add() 方法,并且为该方法传递子元素作为参数。当使用字典时还必须设置 x:Key 特性以便为每个条目指定键名。
- 如果父元素使用 ContentProperty 特性进行修饰,解析器将使用子元素设置对应的属性。
<LinearGradientBrush>
<LinearGriadientBrush.GradientStops>
<GridientStop Offset="0.00" Color="Red"/>
<GridientStop Offset="0.50" Color="Indigo"/>
<GridientStop Offset="1.00" Color="Violet"/>
</LinearGriadientBrush.GradientStops>
</LinearGradientBrush>
解析器知道 GradinetStops 属性返回一个 GradientStopCollection 对象而且实现了 IList 接口。因此,解析器使用 IList.Add() 方法将每个 GradientStop 对象添加到集合中。
所有继承自 ContentControl 类的控件只允许包含单一的嵌套元素。所有继承自 ItemsControl 类的控件允许包含一个条目集合。所有继承自 Panel 类的控件都是用来组织多组控件的容器。
特殊字符与空白
| 特殊字符 | 字符实体 |
|---|---|
| < | < |
| > | > |
| & | & |
| " | " |
我的公众号

WPF_02_XAML的更多相关文章
随机推荐
- SpringAOP-动态代理,日志注入
SpringAOP 前言: 1.AOP定义? 用来干啥的? 怎么用?(怎么跑通它的思路) 代理模式 为啥要学代理模式? -- 因为是SpringAop的底层 原有的代码不敢动,一动就是Bug,.所以使 ...
- 优雅地创建未定义类PHP对象
在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式: new stdClass() new class{} (object)[] 首先是stdClass,这个类是一 ...
- 有哪些浏览器还支持flash?
Flash是大名鼎鼎的全家桶公司Adobe设计的一款网页动画软件,早期的动态网页基本都是基于Flash开发的.但是后来不断爆出关于Flash的安全漏洞和运行效率问题,虽然Adobe公司一直在尝试解决, ...
- pyqt5无边框拖动
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys class ...
- 数字图像处理(一)之灰度转换和卷积python实现
使用Python实现数字图像处理中如下功能: 彩色图像转成灰度图像 实现图像的相关&卷积操作 实现图像的高斯核卷积 使用的库和python版本如下: imageio:2.9.0 用于读取磁盘中 ...
- 11204备库升级PSU
某系统PSU为11.2.0.4.190115,备库打补丁20年10月份(31537677)由readme可知:1.要求OPatch要求为11.2.0.3.23或之后的版本.2.非rac环境打补丁需要关 ...
- 基于go语言学习工厂模式
工厂模式 简单工厂模式(Simple Factory) 定义 优点 缺点 适用范围 代码实现 工厂方法模式(Factory Method) 定义 优点 缺点 适用范围 代码实现 抽象工厂模式(Abst ...
- SpringBoot+WebSocket实时监控异常
写在前面 此异常非彼异常,标题所说的异常是业务上的异常. 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理. 因为 ...
- 洛谷2151[SDOI2009]HH去散步(dp+矩阵乘法优化)
一道良好的矩阵乘法优化\(dp\)的题. 首先,一个比较\(naive\)的想法. 我们定义\(dp[i][j]\)表示已经走了\(i\)步,当前在点\(j\)的方案数. 由于题目中限制了不能立即走之 ...
- scratch塔罗牌的制作
首先,这个程序的流程是洗牌->占卜,很简单的一个程序.那个程序的组成是什么呢? 该程序由22张大卡.开始洗牌按钮.占卜按钮和说出占卜结果的角色组成. 先来说说开始洗牌按钮吧. 开始的时候移动到相 ...