zoukankan      html  css  js  c++  java
  • XAML实例教程系列 类型转换器(Type Converter)

    【转】http://silverlightchina.net/html/windows8/study/2012/0622/16889.html

    在XAML中每一个对象元素映射一个实例,而实例属性可以通过特性(Attributes)进行赋值。在实际项目开发中,对象元素的属性值可以是不同数据类型,根据需求不同,经常需要对数据类型进行转换,就需要使用XAML的类型转换器(Type Converters)。
      

     

    在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代码中声明引用类型转换器,然后在对象属性中应用类型转换器,
     
     
     
    运行时,当改变成绩百分比数值,则成绩文本将数值转换成对应文本类型,运行效果如下:
     
     
     
    今天就讲到这里,欢迎各位留言讨论。
  • 相关阅读:
    61. 最长不含重复字符的子字符串
    60. 礼物的最大价值 (未理解)
    59. 把数字翻译成字符串
    58. 把数组排成最小的数
    57. 数字序列中某一位的数字 (不懂)
    spring data jpa 官方文档
    idea 编译报错 源发行版 1.8 需要目标发行版 1.8
    idea maven 依赖报错 invalid classes root
    solr
    spring boot 官方文档
  • 原文地址:https://www.cnblogs.com/h20064528/p/2664205.html
Copyright © 2011-2022 走看看