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. Linux系列(26) - 强制杀死进程

    查进程 ps  -ef ps -aux #上述两个均可 例子:ps -ef | grep "vim canshu2" 强杀进程 kill -s 9 进程id #命令格式 例子:ki ...

  2. vue.js 配置axios 用来ajax请求数据

    * 用npm 安装 axios 切换到项目的根目录 npm install --save axios vue-axios * 在vue的入口文件./src/main.js 中引入axios, 添加2行 ...

  3. python with 线程锁

    import threading import time num = 0 # 全局变量多个线程可以读写,传递数据 mutex = threading.RLock() # 创建一个锁 class Myt ...

  4. xadmin使用富文本

    环境:pycharm django1.11.20 python2.7 后台xadmin(根据网络各种资料实现) 本教程接上篇如何安装 xadmin,如何不清楚,请看上一篇(django安装xadmin ...

  5. 真机连接电脑后,adb devices显示为空-解决方案

    真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...

  6. 详细的vsftpd配置

    环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[root@KcentOS5 ~]# yum install vsftpd*Dependencies Resolved= ...

  7. Python3入门系列之-----字符串

    字符串 字符串是由数字,字母.下划线组成的一串字符 创建字符串,可以使用单引号和双引号: var1 = 'Hello World!'var2 = "Hello World!" 学习 ...

  8. RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed.

    RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed. 通过观察内存发现,数据加载过程中内存会被耗尽.

  9. 解决安装mysql 到start service出现未响应问题

    mysql下载地址 链接: https://pan.baidu.com/s/1vYpsNkVjUHqOKPQl9Y9A9A 提取码: wngn 安装可以参考 今天下载了MySql5.5,没想到的是前面 ...

  10. JVM学习笔记——GC垃圾收集器

    GC 垃圾收集器 Java 堆内存采用分代回收算法,因此 JVM 针对新生代和老年代提供了多种垃圾收集器. 1. Serial 收集器 Serial 收集器是单线程收集器,采用复制算法. 是最基本的垃 ...