博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF:类型转换器的实现
阅读量:6679 次
发布时间:2019-06-25

本文共 4660 字,大约阅读时间需要 15 分钟。

类型转换器提供字符串文本到值的转换方法来帮助WPF设计时在XAML中配置属性。具体用法可以参考MSDN的文档:。

下面是一个Demo,参考自<葵花宝典--WPF自学手册>。

 1、MainWindow.xaml

1 
7
8
13
25
26 27

第一个Button的Content属性的值设置成一个自定义的Book类,该Book对象调用ToString()方法返回的字符串就会显示在Button上,注意该Book对象的Price属性设置为"$0.1",即0.1美元,通过类型转换器,将会把这个值转换为"0.8"(人民币)。

第二个Button使用了渐变画刷来设置背景。

2、Book.cs

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 //ContenProperty所在的命名空间 6 using System.Windows.Markup; 7  8 namespace WpfApplication1 9 {10     [ContentProperty("Text")] //声明Content属性11     public class Book12     {13         public Book()14         {15         }16         //Name属性17         public string Name18         {19             get;20             set;21         }22         //Price属性的数据类型是一个MoneyType类,该类声明了类型转换器,可以将带有美元符号的价格转换为人民币23         public MoneyType Price 24         {25             get;26             set;27         }28         //Text属性29         public string Text { get; set; }30 31         public override string ToString()32         {33             string str = Name + "售价为:" + Price + "元\n"+Text;34             return str;35         }36     }37 }

Book类中声明了三个自动属性,其中将Text属性声明为ContentProperty,这样不必使用Property-Element语法就可以直接成为Button元素的子类;Price属性是MoneyType类型,该类声明了一个类型转换器,可以将美元转换为人民币。

3、MoneyType.cs

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 //TypeConverter所在的命名空间 7 using System.ComponentModel; 8  9 namespace WpfApplication110 {11     //声明类型转换器12     [TypeConverter(typeof(MoneyConverter))]13     public class MoneyType14     {15         private double _value;16         public MoneyType() { _value = 0; }17         public MoneyType(double value)18         {19             _value = value;20         }21         public override string ToString()22         {23             return _value.ToString();24         }25         //价格转换方法,这里只考虑美元和人民币,不考虑其他币种26         public static MoneyType Parse(string value)27         {28             string str = (value as string).Trim();29             if (str[0] == '$')30             {31                 //将美元转换为人民币32                 string newprice = str.Remove(0, 1);33                 double price = double.Parse(newprice);34                 return new MoneyType(price * 8);35             }36             else37             {38                 //不带特殊符号的字符串默认识别为人民币39                 double price = double.Parse(str);40                 return new MoneyType(price);41             }42         }43     }44 }

MoneyType类中声明了类型转换器,并且实现了一个类方法Parse(),在该方法中完成对字符串的转换。

4、MoneyConverter.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//TypeConverter所在的命名空间using System.ComponentModel;namespace WpfApplication1{    public class MoneyConverter : TypeConverter    {        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)        {            if (sourceType == typeof(string))                return true;            return base.CanConvertFrom(context, sourceType);        }        //转换为字符串类型其实不需要重写此方法        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)        {            if (destinationType == typeof(string))            {                return true;            }            return base.CanConvertTo(context, destinationType);        }        //将string转换为MoneyType        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)        {            if (value is string)                return MoneyType.Parse((string)value);            return base.ConvertFrom(context, culture, value);        }        //将MoneyType转换为string        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)        {            if (destinationType == typeof(string))            {                return ((MoneyType)value).ToString();            }            return base.ConvertTo(context, culture, value, destinationType);        }    }}

这个类型转换器实现了string和MoneyType的相互转换。

5、运行效果

转载于:https://www.cnblogs.com/tt2015-sz/p/4744181.html

你可能感兴趣的文章
常见排序算法总结(含C/C++代码)
查看>>
CurrentRowColor 选中行 颜色改变
查看>>
内容溢出显示省略号
查看>>
二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)
查看>>
更改matlab默认工作路径
查看>>
[转] EM算法
查看>>
在VS中折叠所有代码或展开所有代码
查看>>
JavaScript 书籍推荐(转)
查看>>
《活法》摘录一
查看>>
C/S和B/S结构区别整理
查看>>
python基础===理解Class的一道题
查看>>
Bootstrap3 概述
查看>>
Django中的APP
查看>>
Adobe:彻底解决Firefox与Flash插件卡顿
查看>>
source insight 使用说明
查看>>
Simplify Path
查看>>
JSP放入Jar包支持
查看>>
依赖注入Bean属性
查看>>
Android中的IPC方式
查看>>
计算机网络基础知识(待补充)
查看>>