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> 

网站名称:WPF类型转换器实际概念详解
网页路径:http://www.mswzjz.cn/qtweb/news10/421060.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能