WPF类型转换方法介绍

开发 开发工具
WPF类型转换可以帮助开发人员将一些特定的字符串转换为目标类型。在这篇文章中我们将会为大家详细介绍这一方面的操作方法。

WPF类型转换的应用对于开发人员来说是非常熟悉的。因为在实际编程中,会经常碰到这一情况的出现。那么我们就在这里先来介绍一些WPF类型转换相关基础知识。#t#

在前面关于XAML的Post当中,简单说明了XAML如果引入自定义名称空间。还提到过XAML基本上也是一种对象初始化语言。XAML编译器根据XAML创建对象然后设置对象的值。比如:

 

  1. < Button Width=”100”/> 

很明显,我们设置Button的宽度属性值为100。但是,这个“100”的字符串为什么可以表示宽度数值呢?在XAML中的所有属性值都是用文本字符串来描述,而它们的目标值可以是double等等。WPF如何将这些字符串转换为目标类型?

答案是类型转换器(TypeConverter)。WPF之所以知道使用Double类型是因为在FrameworkElement类中的WidthProperty字段被标记了一个TypeConverterAttribute,这样就可以知道在类型转换时使用何种类型转换器。

TypeConverter是一种转换类型的标准方法。.NET运行时已经为标准的内建类型提供了相应的TypeConverter。所以我们可以用字符串值指定元素的属性。

然而并不是所有的属性都标记了一个TypeConverterAttribute。这种情况下,WPF将根据属性值的目标类型,比如Brush,来判断使用的类型转换器。虽然属性本身没有指定TypeConverterAttribute,但是目标类型Brush自己标记了一个TypeConverterAttribute来指定它的类型转换器:BrushConverter。

所以在转换这种属性时将自动使用目标值类型的BrushConverter将文本字符串类型的属性值转换为Brush类型。

类型转换器对开发人员有什么作用呢?通过它我们可以实现自定义的WPF类型转换。下面一个例子演示了如何从Color类型转换为SolidColorBrush。

 

  1. [ValueConversion(typeof(Color),
     typeof(SolidColorBrush))]  
  2. public class ColorBrushConverter 
    : IValueConverter  
  3. {  
  4. public object Convert(object value, 
    Type targetType, object parameter, 
    System.Globalization.CultureInfo culture)  
  5. {  
  6. Color color = (Color)value;  
  7. return new SolidColorBrush(color);  
  8. }  
  9. public object ConvertBack(object value, 
    Type targetType, object parameter, 
    System.Globalization.CultureInfo culture)  
  10. {  
  11. return null;  
  12. }  

 

然后我们可以在资源中定义一个ColorBrushConverter 实例(src是一个自定义命名空间,引入了ColorBrushConverter 类所在的Assembly)。

 

  1. < Application.Resources> 
  2. < src:ColorBrushConverter 
    x:Key="ColorToBrush"/> 
  3. < /Application.Resources> 

 

***使用这个自定义的WPF类型转换:

 

  1. < DataTemplate DataType=
    "{x:Type Color}"> 
  2. < Rectangle Height="25" 
    Width="25" Fill="{Binding 
    Converter={StaticResource 
    ColorToBrush}}"
    /> 
  3. < /DataTemplate> 

 

其实WPF所使用的这种WPF类型转换从.Net Framework1.0已经开始并广泛应用。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-25 10:05:06

WPF资源

2009-12-23 18:06:25

WPF模板

2009-12-28 11:14:29

WPF显示文本

2009-12-28 13:38:35

WPF类型转换器

2009-12-23 14:19:07

WPF单向绑定

2009-12-28 15:39:33

WPF滑动条

2009-12-25 16:10:31

WPF内存

2009-12-24 16:11:07

WPF图像处理

2009-12-25 17:10:51

WPF动态资源

2009-12-23 14:49:46

WPF面板

2009-12-24 15:22:10

WPF继承自定义窗口

2009-12-28 13:47:35

WPF对话框

2009-12-28 17:48:01

WPF界面布局

2009-12-24 14:38:52

WPF全屏幕窗口

2009-08-05 09:09:14

C#调用VC DLL接

2010-06-18 10:42:51

Linux Acces

2011-07-20 13:34:37

C++

2009-12-25 13:41:33

2009-12-24 17:38:18

WPF事件触发器

2009-12-29 13:29:28

WPF Depende
点赞
收藏

51CTO技术栈公众号