标记扩展和 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. 用jQuery实现优酷首页轮播图

    ▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...

  2. Struts中常用的几个技术

    Struts ognl表达式语言几个符号 #  获取非根元素值  . 动态都建map集合 $  配置文件取值 %  提供一个ognl表达式运行环境 代码示例一:在action类的一个方法中讲一个值存入 ...

  3. 实践javascript美术馆的小案例,学习到的东西还是蛮多的,包括javascript编程中的预留退路、分离javascript、以及实现向后兼容等

    javascript美术馆(改进2) 一.javascript编程过程中的好习惯 1.实现预留退路 js被禁掉,图片也可以显示出来,href属性带有图片路径 <script src=" ...

  4. Find发帖水王哥

    Find发帖水王 传说贴吧有一大“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子总数的一半.如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的 ...

  5. Excel异常Cannot get a text value from a numeric cell

    POI操作Excel时数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric ...

  6. linux系统编程:进程间通信-mmap

    进程间通信-mmap #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, in ...

  7. Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)

    转载地址:http://blog.csdn.net/xiaanming/article/details/9257853 最近有一个需要,我们公司做了一个apk客户端,然后其他的公司可以根据自己的需要来 ...

  8. WCF学习心得--客户端获取服务端自定义类数据

    因项目需求,需要一个WCF服务,赶鸭子上架吧!下面直接切入正题! 首先创建WCF应用程序,具体如何创建就不赘述了,网上一大篇,我主要说说自己遇到的问题 问题一:超时问题,在最后获取数据的时候突然提示服 ...

  9. android 72 确定取消对话框,单选对话框,多选对话框

    package com.itheima.dialog; import android.os.Bundle; import android.app.Activity; import android.ap ...

  10. oracle8

    数据库管理 -- 管理表空间和数据文件 表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库则是存放在表空间中,数据管理是以表空间管理的,表空间由一个或多个数据文件 ...