ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WPF Type Converter和 IValueConverter

2022-08-23 08:00:42  阅读:178  来源: 互联网

标签:控件 xaml IValueConverter 类型 转换器 WPF Type public 属性


初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。

 

1.类型转换器 TypeConverter

1.1类型转换器是用来干什么的?

在xaml中给控件的属性赋值,后台代码解析这个值并赋值给控件的对应的属性(这个属性肯定是依赖属性了)

如在xaml中写:

 <Border BorderBrush="Red" BorderThickness="3">

xaml里面 BorderBrush的数据是一个字符串类型的,那控件的这个颜色为啥会显示红色,因为有个类型转换器,把string类型,转换成了Brush类型

xaml里面BorderThickness的数据是一个字符串类型的,也会有一个类型转换器把它转换成Thickness类型。

只不过这些转换器都是默认有的,如果我自定义了一个类型,就没法自动转换,这时候就需要自己写一个类型转换器了

到这里应该明白:

1.xaml中属性的数据是字符串类型,需要把它转换成控件需要的类型

2.类型可以是基础类型:int double这种,也可以是一个对象类型:Brush、Thickness、Color等

3.类型转换器是用在依赖属性上的,因为要绑定。

4.

 

 xaml里面写的数据先经过类型转换器把数据转换好,再赋值给依赖属性

1.2.如何定义?

定义一个新类型(对象): 

public class NewType
        {
            public double width { get; set; }
            public double height { get; set; }
        }

定义类型转换器,继承Type Converter

 

 定义一个新类型NewType的依赖属性:

 在哪里引用类型转换器?

通过特性在新类型上用

 [TypeConverter(typeof(类型转换器的名字))]
//定义新类型

 

举个例子:定义一个usercontrol,放一个button,然后在依赖属性上同时设置button的长和宽

 

 运行:

 2.值转换器 IValueConverter

2.1 什么是 单值IValueConverter  多值IMultiValueConverter

用在binding表达式中,当目标和源数据进行绑定时,两边类型可能不同,这时候需要值转换器,比如 background属性绑定了一个string数据,无法自己 转换的,就要自己处理值转换器

2.2 如何定义

新建类,继承IValueCOnverter,并实现2个接口:

从源数据到界面

Convert

 从界面到数据源

ConvertBack

单值和多值转换器都是这2个接口

public class SingleIvalueConverter : IValueConverter
public class MyMultiValueConverter : IMultiValueConverter

2.3如何使用

在xaml中定义值转换器,并指定key

<Window.Resources>
        <convert:SingleIvalueConverter x:Key="convert1"/>
        <convert:MyMultiValueConverter x:Key="convert2"/>
    </Window.Resources>

在目标属性的binding表达式中引用

<TextBox Name="tb" Text="{Binding test,Converter={StaticResource convert1}}"/>

多值转换器的引用

<TextBox Name="tb1" Text="1"/>
            <TextBox Name="tb2" Text="2"/>
            <TextBox >
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource convert2 }">
                        <Binding Path="Text" ElementName="tb1"/>
                        <Binding Path="Text" ElementName="tb2"/>
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>

单值转换器

 

 

 

 多值转换器

 

 

3.TypeConvert和IValueConverter的区别

TypeCOnvert是从xaml中的数据到一个依赖属性上时,需要解析采用,如margin=“10,20,30,40”,会解析字符串,传递给对应的属性,不能从属性向xaml传,

IValureConverter是绑定的两端,需要互相转换时用,绑定数据源可以是后台数据,也可以是控件的属性

 

标签:控件,xaml,IValueConverter,类型,转换器,WPF,Type,public,属性
来源: https://www.cnblogs.com/1024E/p/15732929.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有