XAML(Extensible Application Markup Language的简写)是用于实例化.NET对象的标记语言。XAML对于WPF不是必须的。

XAML基础

XAML标准:

  • XAML文档中的每个元素都映射为.NET类的一个实例。
  • 与所有XML文档一样,可在一个元素中嵌套另一个元素。
  • 可通过特性(attribute)设置每个类的属性(property)。

XAML名称空间

xmlns特性是XML中的一个特殊特性,专门用来声明名称空间。

标记扩展

如果将属性值设置为一个已经存在的对象,或者将一个属性绑定到另一个控件来动态地设置属性值,这些情况都需要使用标记扩展-非常规的方式设置属性的专门语法。

标记扩展可以用于嵌套标签或 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 类的控件都是用来组织多组控件的容器。

特殊字符与空白

特殊字符 字符实体
< &lt;
> &gt;
& &amp;
" &quot;

我的公众号

WPF_02_XAML的更多相关文章

随机推荐

  1. 网络协议之:WebSocket的消息格式

    目录 简介 WebSocket的握手流程 webSocket的消息格式 Extensions和Subprotocols 总结 简介 我们知道WebSocket是建立在TCP协议基础上的一种网络协议,用 ...

  2. Java基础系列(14)- JavaDoc生成文档

    JavaDoc JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了 参数信息 @author 作者名 @version 版本号 @since 指 ...

  3. Jmeter系列(7)- 分析源码,创建下单、用户注销接口请求

    源码分析 下单 用户注销 创建请求 下单 用户注销 请求调整 将信息头管理器从[02.浏览订单]请求中抽出来就变成公用的.[03,04]请求不需要单独再加信息头管理器 DeBug取样器 添加DeBug ...

  4. ES增删改查

    了解了一下python对es 7.5的操作,记录下,不难: #!/usr/bin/env python # -*- coding: UTF-8 -*- from settings import Con ...

  5. 『Python』进程同步

    1. Lock(互斥锁) 是可用的最低级的同步指令.Lock处于锁定状态时,不被其他的线程拥有. from multiprocessing import Process, Value, Lock de ...

  6. 踩坑系列《九》 无法获取实体类xxx对应的表名

    话不多说,直接说明原因 类似于 @MapperScan(basePackages = "com.hyxiao.user.mapper") 启动类的mapper扫描注解的导入包正确的 ...

  7. 通俗易懂,Layui前端框架!

    前言   layui 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代 ...

  8. go语言游戏服务端开发(四)——RPC机制

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例. RPC指远程方法调用,游戏里引入RPC目的是降低跨进程交互的复杂度. 游戏业务设计为多go routine,一个玩家一个go routi ...

  9. 三种方法求解最大子区间和:DP、前缀和、分治

    题目 洛谷:P1115 最大子段和 LeetCode:最大子序和 给出一个长度为 \(n\) 的序列 \(a\),选出其中连续且非空的一段使得这段和最大. 挺经典的一道题目,下面分别介绍 \(O(n) ...

  10. DL4J实战之四:经典卷积实例(GPU版本)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...