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实例教程系列

XAML实例教程系列 - 标记扩展(Markup Extensions)

 

 

欢迎大家留言交流,或者加入QQ群交流学习:

22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人 
 

68435160(十一群 企业应用开发推荐群)超级群500人


本文转自 冷秋寒  51CTO博客,原文链接:http://blog.51cto.com/kevinfan/908472 ,如需转载请自行联系原作者

相关文章
|
C#
WPF中Binding使用StringFormat格式化字符串方法
原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 // $123.46 货币格式,一位小数 // $123.5 前文字 //单价:$123.
2307 0
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
|
Swift
Swift中AnyObject、Any、AnyClass、T.self、T.Type、type(of:)、Self的使用和区别
Swift中AnyObject、Any、AnyClass、T.self、T.Type、type(of:)、Self的使用和区别
207 0
|
前端开发
WPF-Binding问题-MVVM中IsChecked属性CommandParameter转换值类型空异常
WPF-Binding问题-MVVM中IsChecked属性CommandParameter转换值类型空异常
188 0
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
WPF-Binding问题-模板样式使用Binding TemplatedParent与TemplateBinding区别
207 0
|
XML C# 数据格式
XAML属性赋值转换之谜(WPF XAML语法解密)
原文:XAML属性赋值转换之谜(WPF XAML语法解密) XAML与XML类似,就是XML延伸过来的。为了更好的表达一些功能,WPF对XML做了扩展,有些功能是WPF在后台悄悄的替你做了。有时候,虽然实现了某个功能,但是对实现原理还是很茫然。
956 0
|
C# 存储
【值转换器】 WPF中Image数据绑定Icon对象
原文:【值转换器】 WPF中Image数据绑定Icon对象        这是原来的代码:                这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。
903 0
潜移默化学会WPF--值转换器
原文:潜移默化学会WPF--值转换器 1. binding 后面的stringFormat的写法----连接字符串         2. [ValueConversion(typeof(decimal), typeof(string))] public class Pr...
1160 0
|
C# 数据格式 XML
【WPF】动态设置Binding的ConverterParameter转换器参数
原文:【WPF】动态设置Binding的ConverterParameter转换器参数 问题:XAML中,想要在一个Bingding语句中再次Bingding。
4598 0
|
C#
Enum Binding ItemsSource In WPF
原文:Enum Binding ItemsSource In WPF在WPF中枚举绑定到ItemsSource。 一、通过ObjectDataProvider 获取Enum数据源 首先我们定义一个Enum类: public enum TableSelectedType { SelectedOne, SelectedTwo, SelectedThird } 接着在Xaml中的Resource里定义数据源。
696 0