2.6 wpf标记扩展
1.什么是标记扩展?为什么要有标记扩展?
标记扩展是扩展xmal的表达能力
为了克服现存的类型转换机制存在的
常用的标记扩展有如下:
x:Array 代表一个.net数组,它的子元素都是数组元素.它必须和x:Type一起使用,用于定义数组类型
x:null 表示空引用
x:static 在过程式代码中定义的任何一个静态属性、常量和枚举
x:type 表示system.Type的一个实例,就像C#中的typeof
注:标记扩展是有Extension的,可以省略不写
标记扩展的语法是 Attribute={} 是花括号
1.staticExtension
<StackPanel Background="{x:Static Brushes.AliceBlue}" />
2.ArrayExtension StaticResourceExtension
<Window.Resources>
<x:ArrayExtension x:Key="listitemboxs" Type="TextBlock">
<TextBlock Text=" one"></TextBlock>
<TextBlock Text=" two"></TextBlock>
<TextBlock Text=" three"></TextBlock>
</x:ArrayExtension>
</Window.Resources>
<StackPanel>
<ListBox ItemsSource="{StaticResourceExtension listitemboxs}"></ListBox>
</StackPanel>
或
<Window x:Class="WpfApplication1.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window3" Height="300" Width="300" WindowStartupLocation="CenterScreen">
<Window.Resources>
<sys:String x:Key="stringHell0">Hello WPF</sys:String>
</Window.Resources>
<Grid>
<TextBlock Height="24" Width="100" Text="{StaticResource ResourceKey=stringHell0}"></TextBlock>
</Grid>
</Window>
3.NullExtension
<StackPanel Background="{x:NullExtension}"/>
4.标记扩展有2种使用方式
<StackPanel Background="{x:NullExtension}"/>
<StackPanel>
<StackPanel.Background>
<x:Static Member="Brushes.AliceBlue"></x:Static>
</StackPanel.Background>
</StackPanel>
以上两种方式显示得到一样的效果,但他们的内部实现机制是不一样的
第一种:
- StaticExtension staticExtension = new StaticExtension("Brushes.AliceBlue");
- StackPanel stackPanel = new StackPanel();
- stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;
- AddChild(stackPanel);
第二种:
- StaticExtension staticExtension = new StaticExtension();
- staticExtension.Member = "Brushes.AliceBlue";
- StackPanel stackPanel = new StackPanel();
- stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;
- AddChild(stackPanel);
这两种使用方式是一样的。但它们的内部实现机制却不同,Xaml解析器解析成的伪代码分别为:
第一种:
- StaticExtension staticExtension = new StaticExtension("Brushes.AliceBlue");
- StackPanel stackPanel = new StackPanel();
- stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;
- AddChild(stackPanel);
第二种:
- StaticExtension staticExtension = new StaticExtension();
- staticExtension.Member = "Brushes.AliceBlue";
- StackPanel stackPanel = new StackPanel();
- stackPanel.Background = staticExtension.ProvideValue(serviceProvider) as Brush;
- AddChild(stackPanel);
实战 :拖动slider,textblock里的值变化
<Grid Margin="4">
<Grid.RowDefinitions>
<RowDefinition Height="24"></RowDefinition>
<RowDefinition Height="4"></RowDefinition>
<RowDefinition Height="24"></RowDefinition>
</Grid.RowDefinitions>总共有3行row
<TextBlock x:Name="tb" Background="White" Text="{Binding ElementName=sid,Path=Value}"></TextBlock>
<Slider Name="sid" Grid.Row="2" Value="50" Maximum="100" Minimum="0"></Slider>这里的Grid.Rows是指显示在Grid里的第2行
</Grid>
注:绿色表示没看明白,日后要修改注的
2.6 wpf标记扩展的更多相关文章
- [No000012C]WPF(4/7)类型转换器和标记扩展[译]
介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩 ...
- [No0000130]WPF 4.5使用标记扩展订阅事件
自从我上次写到关于标记扩展的时候已经有一段时间了...... Visual Studio 11 Developer Preview的发布给WPF带来了一些新功能,让我有理由再次使用它们.我要在这里讨论 ...
- WPF,Silverlight与XAML读书笔记(3) - 标记扩展
hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103 文章- 0 评论- 107 WPF,Silverlight与XAML读书笔记(3) - 标记扩展 说 ...
- wpf中xaml的类型转换器与标记扩展
原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...
- 标记扩展和 WPF XAML
本主题介绍 XAML 的标记扩展概念,包括其语法规则.用途以及底层的类对象模型. 标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能. 本主题专门详细论述了用于 WPF X ...
- WPF:实现自定义标记扩展
标记扩展使用{标记扩展类 参数}语法,如: <TextBlock Text={x:Null}/> 为什么x:Null就可以返回一个null值呢? 其实在System.Windows.Mar ...
- XAML语法及标记扩展、附加属性、特定的字符和空白
1.对象元素语法 使用开闭标签将对象定义一个XML元素,这种语法与其他标记语言如HTML的元素语法非常相似,在以左右尖括号保卫要设置的类或结构的类型名称.对象元素可以声明0个或多个属性,以一个或多个空 ...
- XAML 属性元素,标记扩展和注释
这节来讲一下XAML中的属性元素,标记扩展,和注释. 属性元素 一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值: <Bu ...
- XAML(4) - 标记扩展
在为元素设置值时, 可以直接设置值, 但有时标记扩展非常有帮助.标记扩展包含花括号,其后是定义了标记扩展类型的字符串标志. 下面是一个Static Resource标记扩展: <Button N ...
随机推荐
- HYSBZ - 2763 飞行路线(分层图最短路线)
题目: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价 ...
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
- 大前端之HTML5\CSS3
- Hadoop安装与配置
Hadoop介绍 上面是官方介绍,翻一下来总结一句话就是:Hadoop是一个高可用,用于分布式处理大规模计算的工具. Hadoop1.2 下载 . Hadoop1.2 安装 1. 安装jDK 2. 配 ...
- 常见算法的python实现
提到排序算法,常见的有如下几种:冒泡排序.选择排序.插入排序.快速排序.堆排序.归并排序.希尔排序:查找算法最常见二分查找.这些算法的时间复杂度如下: 算法名称 时间复杂度(一般情况) 冒泡排序 O( ...
- JS 去除字符串空格
$.trim()是jQuery提供的函数,用于去掉字符串首尾的空白字符. "abc 123 def".replace(/\s/g, "") 去除所有的空格
- Microsoft Excel 准确按照一页的宽度和高度打印
设置 Microsoft Excel 准确按照一页的宽度和高度打印 Sheet1. VBA复制 With Worksheets("Sheet1").PageSetup .Zoo ...
- noip模拟赛 集合
分析:感觉像是贪心,再看数据范围这么大,肯定是贪心没错.但是要怎么贪呢?主要的思想是让每次往上加的数尽量多,肯定要先把0分裂,如果能正好一起跳到最终状态就好.举个例子:5,3,2,1,最大值比次大值大 ...
- poj 3648 2-sat 输出任意一组解模板
转载地址:http://blog.csdn.net/qq172108805/article/details/7603351 /* 2-sat问题,题意:有对情侣结婚,请来n-1对夫妇,算上他们自己共n ...
- 序列终结者(bzoj 1521)
Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...