WPF编程宝典--类型转换器

写在前面

好几天没写文章了,这段时间在学习计算机网络这本书,因为我的专业是弱电类的,所以计算机网络这门课我基本是上课梦游,作业搪塞,还好考试很简单,不然我感觉我就挂了。但是作为一个软件行业的从业者不懂计算机网络,就好像乞丐没有一个破碗,是寸步难行,之前做的项目并没有涉及到计算机网络这一块所以一直没有在意,但是前段时间参加了一些面试,发现计算机网络相关的知识储备太少了。所以最近准备恶补计算机网络从基础开始学起,买了一本谢希仁的计算机网络教材,看了一章发现按照自己看书的学法好像不太行,所以准备买一些以此书为中心的讲解课程,如果同学们有可以推荐给我。废话太多了,下面就进入本文的重点吧!

什么是类型转换器

类型转换器顾名思义,就是把一个类型转换成另一个类型的工具。说到这里肯定有很多同学就会问了,类型转换完全不用写转换器啊,C#自带了很多类型转换的方法啊,隐式转换,显示转换,强制转换等等。这里就要提到它的使用场景了,在WPF项目中,根据代码的种类我们可以将其分为前端代码和后端逻辑代码。而同学们刚刚讲到的这些类型转换的方法都是后端逻辑代码中经常会用到的方法。但是你有没有想过,只在前端代码中怎么实现类型转换呢,说到这里可能又有同学要问了,前端代码为什么要类型转换呢?没有必要啊!这就要跟之前讲过的元素绑定扯上关系了,我们经常会帮一个控件的某个属性绑定在另一个控件的某个属性上,但是前提是这两个属性值的类型必须是相同的。那么如果不同怎么办呢?很多同学都反应过来了,对!这就是类型转换器的作用。

创建类型转换器

今天我创建的类型转换器很简单,把Bool类型转换成Double类型。主要的应用场景是把CheckBox的IsChecked属性和TextBox的Opacity属性绑定在一起,IsChecked属性值是BooLean,而Opacity属性值是Double。所以我们要创建一个简单的BoolToDoubleConverter。

首先我们要创建一个WPF项目,然后在项目中添加一个名为TypeConverter的文件夹,这个文件夹我们会专门用来存放类型转换器。最后在文件夹中添加一个名为BoolToDoubleConverter的类文件。

	//转换器要继承IValueConverter接口,来实现转换器必要的两个方法,Convert和ConvertBack
	public class TypeConverter : IValueConverter
    {
    	//类型转换,true <=> 1.0    false <=> 0.0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if(value is Boolean && (bool)value)
            {
                return 1.0;
            }
            return 0.0;
        }
		//因为Mode=OneWay所以反转报错就行(偷个懒,同学们也可以把反转写完)
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

这样,一个简单的类型转换器就完成了。

使用类型转换器

类型转换器,主要是在绑定中使用,上代码:

<Window x:Class="MultiCardTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MultiCardTest"
        xmlns:converter="clr-namespace:MultiCardTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <converter:TypeConverter x:Key="TypeConverter"/>
    </Window.Resources>
    <Grid>
        <CheckBox x:Name="check_box" Height="20" Width="100" VerticalAlignment="Top">opacity</CheckBox>
        <TextBlock Height="100" Width="100" Opacity="{Binding Path=IsChecked,ElementName=check_box,Converter={StaticResource TypeConverter},Mode=OneWay}" VerticalAlignment="Center">test</TextBlock>
    </Grid>
</Window>

写在结尾

最近发现了一个学习算法的网站 力扣 ,里面有很多关于算法的题目,还有很多志同道合的朋友,大佬,感觉挺适合新手在里面学算法的,我也是刚开始接触这个网站,之后可能会开一个专题专门用来讲解我在这个网站上的解题过程吧,也算是一种积累吧,与君共勉!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值