WPF扩展标记
标记扩展和 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 标记扩展。
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扩展标记的更多相关文章
- WPF扩展标记X:STATIC
原文:WPF扩展标记X:STATIC public class XStaic { public static string Content = "确定"; ...
- WPF整理-自定义一个扩展标记(custom markup extension)
"Markup extensions are used to extend the capabilities of XAML, by providing declarativeoperati ...
- XML 概述 (可扩展标记语言)
XML:eXtensible Markup Language 可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的. 功能: 存储数据 ...
- 关于XML(可扩展标记语言)的基础知识与写法------2017-05-18
XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示 XML:可扩展标记语言,用来做数据传输XML特点: 1.树状结构,有且只有一个根 2.标签名 ...
- 关于XML(可扩展标记语言)的基础知识与写法
XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示 XML:可扩展标记语言,用来做数据传输XML特点:1.树状结构,有且只有一个根2.标签名自定 ...
- java XML(可扩展标记语言)
XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...
- UWP开发入门(三)——{x:Bind}扩展标记
上周打炉石打得太晚……忘记更新了,本周补上.本篇我们讲一下{x:Bind}扩展标记.{x:Bind}扩展标记也是Windows 10 Uinversal 新增的内容,按官方的说法是 {Binding} ...
- XML简介——可扩展标记语言(Extensible Markup Language)
(What) XML是什么? XML指可扩展标记语言(Extensible Markup Language) 1. XML是一种标记语言,类似HTML. 2. XML具有自我描述性 3. XML ...
- 可扩展标记语言XML之二:XML语言格式规范、文档组成
大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...
随机推荐
- UNITY打包问题
1,打包有二种,打包可执行程序-player,打包资源包-assetbundle 2,打包player后,在PC平台去看打包后对应的资源大小,发现比原始资源小得多,模型资源压缩率约60%,图资源压缩率 ...
- Scanner类的.next()和.hashNext()方法
使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...
- servletConfig对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,web容器在创建servlet实例对象 ...
- [CSS] DOM Hierarchy Pseudo Classes :first-child :last-child :nth-child (demystified)
DOM hierarchy pseudo-classes allow you to style specific elements based on where they fall in the hi ...
- android85 短信防火墙
系统收到短信是有广播的,广播中包含了短信的号码和内容 ###短信防火墙 * 系统发送短信广播时,是怎么把短信内容存入广播的,我们就只能怎么取出来 * 如果短信过长,那么发送时会拆分成多条短信发送,那么 ...
- mybatis01
mybatis是一个java持久层框架,java中操作关系型 数据库用的是jdbc,mybatis是对jdbc的一个封装. jdk1..0_72 eclipse:eclipse-3.7-indigo ...
- GDB反向调试 + 指令记录+函数历史记录
http://blog.chinaunix.net/uid-26941022-id-3199961.html b.c void fun(int a, int b){ int c; c=a+b; } v ...
- android开发之手势识别
由于精确度等原因,手势识别在android中用的并不多,不过这并不妨碍我们来玩玩这个神奇的玩意. 在android中要使用手势,先得建立手势库,建立手势库非常简单,新建一个android sample ...
- Ⅶ.AngularJS的点点滴滴-- 事件
事件(和js一样有冒泡和捕获) <html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2 ...
- GUI编程笔记(java)06:GUI窗体添加按钮并对按钮添加事件案例
1.需求:把按钮添加到窗体,并对按钮添加一个点击事件. 步骤: (1)创建窗体对象(2)创建按钮对象(3)把按钮添加到窗体(4)窗体显示 2.编写程序思路: 窗体布局:窗体中组件的排列方式 布局分类 ...