标记扩展和 WPF XAML,标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能

XAML 处理器和标记扩展

XAML 分析器可将特性值解释为可转换成基元的文本字符串,或可通过某种方法将特性值转换为对象。其中一种方法是引用类型转换器; TypeConverters 和 XAML。不过,也存在要求其他行为的情况。例如,可以指示 XAML 处理器,特性的值不应在对象图中生成新对象。特性应生成引用对象图另一部分中的已构造对象或引用静态对象的对象图。另一种情况是,可以指示 XAML 处理器使用向对象构造函数提供非默认参数的语法。在这些类型的情况中,标记扩展可以提供解决方案。

基本标记扩展语法

可以实现标记扩展以便为特性用法中的属性和/或属性元素用法中的属性提供值。

当用于提供特性值时,将标记扩展序列与 XAML 处理器区分开的语法就是左右大括号({ 和 })。然后,由紧跟在左大括号后面的字符串标记来标识标记扩展的类型。

当用在属性元素语法中时,标记扩展在外观上与其他任何用于提供属性元素值的元素相同,即:一个将标记扩展类作为一个元素引用并以尖括号 (<>) 括起的 XAML 元素声明。

XAML 定义的标记扩展

几个标记扩展并非是 XAML 的 WPF 实现所特有的,而是语言形式的 XAML 的内部函数或功能实现。这些标记扩展在 System.Xaml 程序集中作为常规 .NET Framework XAML 服务的一部分而实现,并且位于 XAML 语言 XAML 命名空间中。就常见标记用法而言,这些标记扩展通常可由用法中的 x: 前缀标识。MarkupExtension 基类(也在 System.Xaml 中定义)提供了所有标记扩展均应使用的模式,以便在 XAML 读取器和 XAML 编写器中得到支持(包括在 WPF XAML 中得到支持)。

  • x:Type 为命名类型提供 Type 对象。此工具最常用于样式和模板。有关详细信息,请参见 x:Type 标记扩展

  • x:Static 生成静态值。这些值来自不直接是目标属性值的类型、但可以计算为该类型的值类型代码实体。有关详细信息,请参见 x:Static 标记扩展

  • x:Null 将 null 指定为属性的值,可用于特性或属性元素值。有关详细信息,请参见 x:Null 标记扩展

  • 在特意不使用 WPF 基元素和控件模型提供的集合支持的情况下,x:Array 为 XAML 语法中常规数组的创建提供支持。有关详细信息,请参见 x:Array 标记扩展

XAML 定义的标记扩展


有几个标记扩展并非是 XAML 的 WPF 实现所特有的,而是语言形式的 XAML 的内部函数或功能实现。这些标记扩展在 System.Xaml 程序集中作为常规 .NET Framework XAML 服务的一部分而实现,并且位于 XAML 语言 XAML 命名空间中。就常见标记用法而言,这些标记扩展通常可由用法中的 x: 前缀标识。MarkupExtension 基类(也在 System.Xaml 中定义)提供了所有标记扩展均应使用的模式,以便在 XAML 读取器和 XAML 编写器中得到支持(包括在 WPF XAML 中得到支持)。
  • x:Type 为命名类型提供 Type 对象。此工具最常用于样式和模板。有关详细信息,请参见 x:Type 标记扩展

  • x:Static 生成静态值。这些值来自不直接是目标属性值的类型、但可以计算为该类型的值类型代码实体。有关详细信息,请参见 x:Static 标记扩展

  • x:Null 将 null 指定为属性的值,可用于特性或属性元素值。有关详细信息,请参见 x:Null 标记扩展

  • 在特意不使用 WPF 基元素和控件模型提供的集合支持的情况下,x:Array 为 XAML 语法中常规数组的创建提供支持。有关详细信息,请参见 x:Array 标记扩展

 
WPF 编程中最常用的标记扩展是支持资源引用的标记扩展(StaticResource 和 DynamicResource)以及支持数据绑定的标记扩展 (Binding)。
  • StaticResource 通过替换已定义资源的值来为属性提供值。StaticResource 计算最终在 XAML 加载时进行,并且在运行时没有访问对象图的权限。有关详细信息,请参见 StaticResource 标记扩展

  • DynamicResource 通过将值推迟为对资源的运行时引用来为属性提供值。动态资源引用强制在每次访问此类资源时都进行新查找,并在运行时有权访问对象图。为了获取此访问权限,WPF 属性系统中的依赖项属性和计算出的表达式支持 DynamicResource 概念。因此,对于依赖项属性目标,您只能使用 DynamicResource。有关详细信息,请参见 DynamicResource 标记扩展

  • Binding 使用在运行时应用于父对象的数据上下文来为属性提供数据绑定值。此标记扩展相对复杂,因为它会启用大量内联语法来指定数据绑定。有关详细信息,请参见 绑定标记扩展

  • RelativeSource 为可以在运行时对象树中定位若干可能关系的 Binding 提供源信息。对于在多用途模板中创建的绑定,或在未充分了解周围的对象树的情况下以代码创建的绑定,上述标记扩展会提供专用源。有关详细信息,请参见 RelativeSource MarkupExtension

  • 通过 TemplateBinding,控件模板可以使用来自要利用该模板的类的对象模型定义属性中的模板化属性的值。换言之,模板定义中的属性可访问仅在应用了模板之后才存在的上下文。有关详细信息,请参见 TemplateBinding 标记扩展。有关 TemplateBinding 的实际使用的更多信息,请参见 Styling with ControlTemplates Sample(使用 ControlTemplates 设置样式的示例)。

  • ColorConvertedBitmap 支持相对高级的映像方案。请参见 ColorConvertedBitmap 标记扩展

  • ComponentResourceKey 和 ThemeDictionary 支持资源查找的各个方面,特别是支持查找与自定义控件打包在一起的资源和主题。有关更多信息,请参见ComponentResourceKey 标记扩展ThemeDictionary 标记扩展控件创作概述

下面演示了静态资源扩展标记引用

xaml文件:

<Window x:Class="WPF扩展标记.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="" Width="">
<Window.Resources>
<SolidColorBrush x:Key="backgroundBrush">BlanchedAlmond</SolidColorBrush>
<SolidColorBrush x:Key="borderBrush">blue</SolidColorBrush>
</Window.Resources>
<Grid>
<!--通过标记扩展是支持资源引用的标记扩展,这里只展示了静态资源引用-->
<Button Background="{StaticResource backgroundBrush}"
BorderBrush="{StaticResource borderBrush}" Margin="5,0,95,5">
<Image Height="" Source="1.jpg"/>
</Button> </Grid>
</Window>

简单的效果:
简单示例:http://files.cnblogs.com/BABLOVE/WPF%E6%89%A9%E5%B1%95%E6%A0%87%E8%AE%B0.rar

WPF扩展标记的更多相关文章

  1. WPF扩展标记X:STATIC

    原文:WPF扩展标记X:STATIC public class XStaic     {         public static string Content = "确定"; ...

  2. WPF整理-自定义一个扩展标记(custom markup extension)

    "Markup extensions are used to extend the capabilities of XAML, by providing declarativeoperati ...

  3. XML 概述 (可扩展标记语言)

    XML:eXtensible Markup Language  可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的.        功能:            存储数据   ...

  4. 关于XML(可扩展标记语言)的基础知识与写法------2017-05-18

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点: 1.树状结构,有且只有一个根 2.标签名 ...

  5. 关于XML(可扩展标记语言)的基础知识与写法

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点:1.树状结构,有且只有一个根2.标签名自定 ...

  6. java XML(可扩展标记语言)

    XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...

  7. UWP开发入门(三)——{x:Bind}扩展标记

    上周打炉石打得太晚……忘记更新了,本周补上.本篇我们讲一下{x:Bind}扩展标记.{x:Bind}扩展标记也是Windows 10 Uinversal 新增的内容,按官方的说法是 {Binding} ...

  8. XML简介——可扩展标记语言(Extensible Markup Language)

    (What) XML是什么? XML指可扩展标记语言(Extensible Markup Language) 1.  XML是一种标记语言,类似HTML. 2.  XML具有自我描述性 3.  XML ...

  9. 可扩展标记语言XML之二:XML语言格式规范、文档组成

    大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...

随机推荐

  1. KVM虚拟化技术

    KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...

  2. spring 整合JDBC

    使用Spring提供的三个JDBC模板类(JdbcTemplate.NamedParameterJdbcTemplate.SimpleJdbcTemplate)操作数据库 一.JdbcTemplate ...

  3. 如何判断Android系统的版本

    随着Android版本的增多,在不同的版本中使用不同的设计是必须的,根据程序运行的版本来提供不同的功能.这涉及到如何在程序中判断Android系统的版本. 在Android api中的android. ...

  4. mybatis04 根据用户名称模糊查询用户信息

    根据用户名称模糊查询用户信息可能返回多条记录. 1.1.1User.xml 编码 如果用%进行模糊查询,#{}表示一个占位符会被翻译为一个?号(SELECT * FROM USER WHERE id= ...

  5. 一句代码,更加优雅的调用KVO和通知

    来源:wazrx 链接:http://www.jianshu.com/p/70b2503d5fd1 写在前面 每次使用KVO和通知我就觉得是一件麻烦的事情,即便谈不上麻烦,也可说是不方便吧,对于KVO ...

  6. Android开发之UI的编程方式创建

    我们知道,android中一个activity对应一个xml的UI配置文件,除了用xml文件配置的方式创建用户界面外,还可以使用代码编程的方式来创建一个用户界面.如果用户界面需要在运行过程中动态生成的 ...

  7. 256MB小内存MySQL配置优化

    [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mys ...

  8. 第一篇:APUE-操作系统IO模型

    操作系统IO模型   操作系统IO模型 声明:如下内容是根据APUE和mycat两本著作中关于I/O模式的一些内容加上自己的一些理解整理而成,仅供学习使用. 本节内容 UNIX下可用的五种I/O模型 ...

  9. c#获取远程图片的方法

    public static int SaveImageFromWeb(string imgUrl, string path) { var aaa = Environment.CurrentDirect ...

  10. chrome偶尔弹出新窗口的解决方案

    最近使用谷歌浏览器,在搜索页点击搜索结果时,偶尔会弹出新窗口,而不是新标签,试验发现,只要将chrome里面安装的google drive app卸载就行了. 当然了,如果此方法不适合你的情况,还可以 ...