XAML实例教程系列 - 类型转换器(Type Converter)七
在XAML中每一个对象元素映射一个实例,而实例属性可以通过特性(Attributes)进行赋值。在实际项目开发中,对象元素的属性值可以是不同数据类型,根据需求不同,经常需要对数据类型进行转换,就需要使用XAML的类型转换器(Type Converters)。本篇将讲解XAML类型转换器的使用。
XAML类型转换器基础
在Windows 8或者Silverlight应用开发中,经常会用到类型转换器,例如对按钮的内容进行赋值,代码如下:
<Button Content=“按钮演示”/>
按钮的Content属性被赋值为字符串类型“按钮演示”。XAML语法解析器可以将字符串类型转换为对应的.Net类型,然后进行赋值操作。而如果在按钮控件中,添加内容文本颜色属性,
<Button Content=“按钮演示”Foreground=“Blue”/>
在.Net Framework中,Foreground属性的数据类型是Brush,通过SolidColorBrush对Color进行赋值,在以上代码中,XAML语法解析器需要使用类型转换器(Type Converters)将简单文本字符串“Blue”,转换为对应的“Brush”画刷类型,其颜色值为Red=0,Green=0,Blue=255,Aplha=255。 对应后台代码类型转换是:
Button button = new Button { Foreground = new SolidColorBrush(Color.FromArgb(0, 0, 255, 255)) };
这一转换过程是由.Net Framework内置类型转换器实现的,无需开发人员干涉。
转换过程主要是以下两个步骤:
1. XAML语法解析器会检查需要赋值的属性是否存在内置类型转换器,如果发现对应类型转换器,则将属性的属性值字符串转换为对应的.Net类型;
2. 如果没有发现内置类型转换器,XAML语法解析器将查找元素对象中是否使用标记扩展(Markup Extensions)调用自定义类型转换器;
如果以上两个步骤都没有发现对应类型转换器的存在,XAML语法解析器将返回类型错误。
因为XAML支持标记扩展(Markup Extensions),可以在运行时对属性进行赋值,而属性值类型通常需要进行对应的类型转换才能正常使用,所以在实际项目中,经常会用到XAML类型转换器功能,不仅仅局限于项目内置类型转换器,同时还允许开发人员通过继承TypeConverter类创建自定义类型转换器。
XAML类型转换器接口实现
XAML类型转换器的语法格式和使用方法与标记扩展(Markup Extensions)相同。在XAML后台代码实现接口IValueConverter,在Convert和ConvertBack中创建转换器逻辑代码,
public object Convert(object value, System.Type type, object parameter, string language)
{
throw new NotImplementedException(); //这里添加具体类型转换逻辑代码
}
public object ConvertBack(object value, System.Type type, object parameter, string language)
{
throw new NotImplementedException(); //如果是双向绑定,同时需要添加类型转换逻辑代码
}
XAML类型转换器简单实例
在下面的实例,创建一个Windows 8 Metro应用,应用实现修改成绩百分比,使用类型转换器实现同时修改成绩文本。
首先创建一个类文件,ValueConverter.cs,然后实现接口IValueConverter,



XAML实例教程系列:
XAML实例教程系列 - 标记扩展(Markup Extensions)
欢迎大家留言交流,或者加入QQ群交流学习:
22308706(一群) 超级群500人
37891947(二群) 超级群500人
100844510(三群) 高级群200人
32679922(四群) 超级群500人
23413513(五群) 高级群200人
32679955(六群) 超级群500人
88585140(八群) 超级群500人
128043302(九群 企业应用开发推荐群) 高级群200人
101364438(十群) 超级群500人
68435160(十一群 企业应用开发推荐群)超级群500人
XAML实例教程系列 - 类型转换器(Type Converter)七的更多相关文章
- XAML实例教程系列 - 资源(Resources)
Kevin Fan分享开发经验,记录开发点滴 XAML实例教程系列 - 资源(Resources) 2012-08-10 12:47 by jv9, 1386 阅读, 1 评论, 收藏, 编辑 在Wi ...
- XAML实例教程系列 - XAML传递参数到值转换类实例 八
Kevin Fan分享开发经验,记录开发点滴 XAML实例教程系列 - XAML传递参数到值转换类实例 2012-06-28 05:25 by jv9, 508 阅读, 0 评论, 收藏, 编辑 继上 ...
- XAML实例教程系列 - 标记扩展(Markup Extensions) 六
XAML实例教程系列 - 标记扩展(Markup Extensions) 分类: Windows 8 Silverlight2012-06-21 13:00 1139人阅读 评论(0) 收藏 举报 扩 ...
- XAML实例教程系列 - 依赖属性和附加属性(四)
XAML实例教程系列 - 依赖属性和附加属性 2012-06-07 13:11 by jv9, 1479 阅读, 5 评论, 收藏, 编辑 微软发布Visual Studio 2012 RC和Wind ...
- XAML实例教程系列 - 事件(Event) 五
Kevin Fan分享开发经验,记录开发点滴 XAML实例教程系列 - 事件(Event) 2012-06-19 01:36 by jv9, 1727 阅读, 7 评论, 收藏, 编辑 Events, ...
- XAML实例教程系列 - 命名空间(NameSpace) 三
XAML实例教程系列 - 命名空间(NameSpace) 2012-05-28 14:14 by jv9, 2205 阅读, 10 评论, 收藏, 编辑 上一篇曾提及XAML中,每个对象元素的声明是对 ...
- XAML实例教程系列 - 对象和属性(二)
XAML实例教程系列 - 对象和属性 2012-05-22 14:18 by jv9, 1778 阅读, 6 评论, 收藏, 编辑 在前一篇已经介绍XAML概念:“XAML语言是Extensible ...
- XAML实例教程系列 - 开篇(一)
XAML实例教程系列 - 开篇 2012-05-14 11:47 by jv9, 5588 阅读, 8 评论, 收藏, 编辑 去年,曾答应银光中国论坛的朋友推出一个关于XAML语言实例教程系列,帮助学 ...
- Windows 8实例教程系列 - 数据绑定基础实例
原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...
随机推荐
- solr 6.5.1 linux 环境安装
前言 最近在研究搜索引擎,准备搭建一套属于自己的搜索APP,用于搜索的数据我已通过scrapy抓到本地了,现在需要一个搜索引擎来跑这些数据.于是选择了基于Lucene的solr来为我做搜索引擎的工作. ...
- CAD在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据
在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据.下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中. 主要用到函数说明: _DMxDrawX::InsertBlo ...
- oracle中的冷热备份
oracle有四种备份方法:冷备份.热备份.RMAN备份.逻辑备份. 其中冷备份和热备份都是用操作系统命令对oracle文件直接进行拷贝, 不同的是冷备份是把数据库关闭后再备份,备份过程中也要关闭数据 ...
- jquery 五星评价(图片实现)
1111 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- JAVA基础——toString()方法
toString()方法返回反映这个对象的字符串 因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如S ...
- 在MONO Design中使用Flex3D
在项目开发组的努力下,HTML5 3D 的开发包变得越来越优秀,越来越健壮:基于HTML5 3D技术的MONO Design建模平台功能也变得越来越强大和完善,这个方便了很多使用我们HTML5 3D的 ...
- UVA - 1374 Power Calculus (dfs迭代加深搜索)
题目: 输入正整数n(1≤n≤1000),问最少需要几次乘除法可以从x得到xn ?在计算过程中x的指数应当总是正整数. 思路: dfs枚举次数深搜 注意: 1.指数如果小于0,就退出当前的搜索 2.n ...
- 前端面试题总结一(js变量和函数声明提前相关)
好久没有更新博客了,^_^写写博客吧!下面是我总结的一些面试题,希望对大家有所帮助 (1)题目如下: alert(a) var a=1 function a(){ alert(a) } 好多 ...
- HDU 4598 Difference
Difference Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- UVA 10692 Huge Mod
Problem X Huge Mod Input: standard input Output: standard output Time Limit: 1 second The operator f ...