WPF类型转换器实际概念详解

开发 开发工具
WPF类型转换器可以帮助我们将特定字符串转换为目标类型。并且可以自定义我们需要的WPF类型转换器。在这里我们将会为大家详细介绍有关用法。

WPF开发工具的出现,在当今这一技术革新速度非常快的时代中,仍然长时间的占据着主导地位。它的方便灵活为开发人员带来许多便捷之处。我们先来看看WPF类型转换器相关概念说明。#t#

我们先来看下面这一代码片段:

< 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> 

 

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

2009-12-28 16:28:35

WPF元素类型样式

2010-06-10 14:33:03

协议转换器

2009-09-11 12:41:41

C#类型转换

2009-12-28 16:54:30

WPF注释

2010-06-17 23:31:35

协议转换器

2009-12-24 14:18:57

WPF类型转换

2009-12-24 15:36:41

WPF逻辑树

2009-12-25 17:48:43

WPF资源路径

2010-06-10 14:44:33

协议转换器

2013-06-13 15:10:27

.NET代码转换

2009-08-07 09:33:23

ASP.NET控件开发

2010-06-10 15:03:13

协议转换器

2009-12-28 14:32:31

WPF窗体对话框

2009-12-23 09:18:39

WPF开发工具

2023-08-26 19:04:40

配置write转换器

2021-09-04 17:26:31

SpringBoot转换器参数

2010-06-10 14:38:30

协议转换器

2010-06-10 14:49:07

协议转换器

2010-03-30 16:33:55

Oracle数据类型

2009-12-23 17:01:09

WPF Command
点赞
收藏

51CTO技术栈公众号