WPF系列(二)数据转换
WPF中的依赖属性绑定对象时,如果数据类型不一致,会发生数据转换,比如int 转string 等,这些WPF会帮我们做好,但是如果是比较负杂的类型,比如bool类型转换成 Visibility,就不行了。这时候我们需要自定义转换的类。
这里还是以一个自定义控件的示例来进行说明。
自定义控件调音台SingnalLight,实现功能(示例程序摘自鱼哥的地盘)
- 接收来自外部的范围0~100的数值
- 实时显示接收数值
- 列表内容
- 数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色
可在父控件上拖拽该控件
其中数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色这个功能就是使用的数据转换功能。以下是源代码
public class SingnalLightStatusConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){SolidColorBrush result = Brushes.Transparent;if (value.GetType() == typeof(int)){var color = System.Convert.ToInt32(value);if (color < 50) result = Brushes.Green;else if (color < 85 && color >= 50) result = Brushes.Yellow;else if (color <= 100 && color >= 85) result = Brushes.Red;else result = Brushes.Gray;}return result;}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){throw new NotImplementedException();}}
需要实现IValueConverter接口。我们来看一下,.NET中是如何对IValueConverter接口进行说明的。
//// 摘要:// 提供一种将自定义逻辑应用于绑定的方式。public interface IValueConverter{//// 摘要:// 转换值。//// 参数:// value:// 绑定源生成的值。//// targetType:// 绑定目标属性的类型。//// parameter:// 要使用的转换器参数。//// culture:// 要用在转换器中的区域性。//// 返回结果:// 转换后的值。如果该方法返回 null,则使用有效的 null 值。object Convert(object value, Type targetType, object parameter, CultureInfo culture);//// 摘要:// 转换值。//// 参数:// value:// 绑定目标生成的值。//// targetType:// 要转换到的类型。//// parameter:// 要使用的转换器参数。//// culture:// 要用在转换器中的区域性。//// 返回结果:// 转换后的值。如果该方法返回 null,则使用有效的 null 值。object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
最后我们来看如何使用自定义的数据转换功能,以下是自定义SingnalLight的xaml文件。
<Style TargetType="{x:Type local:SingnalLight}"><Setter Property="RenderTransform"><Setter.Value><TranslateTransform X="{Binding Path=X,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"Y="{Binding Path=Y,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"/></Setter.Value></Setter><Setter Property="Template"><Setter.Value><ControlTemplate><ControlTemplate.Resources><local:SingnalLightStatusConverter x:Key="colorconverter"></local:SingnalLightStatusConverter><local:SingnalLightValueConverter x:Key="valueconverter"></local:SingnalLightValueConverter></ControlTemplate.Resources><StackPanel><TextBlock Text="{Binding Path=ValueA,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"></TextBlock><TextBlock Text="100"></TextBlock><Border x:Name="bd1"Height="{Binding Path=LightHeight,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"SnapsToDevicePixels="True"BorderBrush="Black" BorderThickness="1" Background="Transparent"><Rectangle Fill="{Binding Path=ValueA,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}},Converter={StaticResource ResourceKey=colorconverter}}" VerticalAlignment="Bottom"><Rectangle.Height><MultiBinding Converter="{StaticResource ResourceKey=valueconverter}"><Binding Path="ValueA" RelativeSource="{RelativeSource AncestorType={x:Type local:SingnalLight}}"></Binding><Binding Path="Height" ElementName="bd1"></Binding></MultiBinding></Rectangle.Height></Rectangle></Border><TextBlock Text="0"></TextBlock></StackPanel></ControlTemplate></Setter.Value></Setter></Style>
很明显可以看出来自定义的数据转换相当与资源的一种。在绑定的时候,增加一个Converter节点即可。
<Rectangle Fill="{Binding Path=ValueA,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}},Converter={StaticResource ResourceKey=colorconverter}}"
WPF系列(二)数据转换相关推荐
- 算法系列(二):贪心算法--Huffman编码
算法系列(二):贪心算法--Huffman编码 一.分析 问题描述: 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法.其压缩率通常在20%-90%之间.哈夫曼编码算法使用字符在文件中出现的频率 ...
- yolov8系列(二)-训练自己的目标分割模型,并web部署
yolov8系列[二]-训练自己的目标分割模型,并web部署 0. 系统效果展示 1. yolov8训练高压电线覆冰模型 1.1. 制作高压电线覆冰数据 1.2. 数据转换成yolo格式数据 1.3. ...
- 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装
相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
- 一起学WPF系列(2):第一个WPF应用程序
概述 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序.使用 WPF,您可以创建广泛的独立 ...
- 人工智能算法通俗讲解系列(二):逻辑回归
2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...
- 【算法系列 二】Stack
为什么80%的码农都做不了架构师?>>> 栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...
- 《CDN 之我见》系列二:原理篇(缓存、安全)
2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...
- SEO系列二:何为用户体验?如何做好用户体验?
昨天写了一篇<SEO系列一:SEO是什么?SEO有什么意义?>的文章,受到了汇道童鞋们的支持和鼓舞,周珍在这里和大家说声谢谢.甚至还有童鞋说期待我写到SEO系列2000,是否能写到2000 ...
- 一步步构建多层架构系列二之设计模式运用篇
上节我们讲到数据对象创建的管理,那么如何管理数据访问类的对象创建呢?先从为什么需要设计模式的原理说起吧 为了更好的理解设计思想,我尽可能的用实例来演示推进.但随着需求的增加,程序将越来越复杂.此时就有 ...
最新文章
- 基于圆形标定点的相机几何参数的标定
- bzoj4154[Ipsc2015]Generating Synergy
- linux中的定时,linux中的定时任务
- 报错引发的版本对应——tensorflow+keras+python版本对应(全)
- 语言主程序和子程序的写法_汇编语言程序设计第三篇——汇编程序结构
- java 死锁的检测与修复_调查死锁–第4部分:修复代码
- 使用HTML5和JavaScript创建音乐播放列表
- jinja Template Synopsis
- 调试错误解决方案之VC++
- http://www.eoeandroid.com
- Android MeasureSpec详解
- JavaWeb项目打包上线简单流程
- Python + Selenium自动化测试
- 成本会计的概念、产品成本核算的要求、产品成本核算的对象与成本项目、产品成本的归集和分配(可能考判断)、产品成本计算方法 (三种:产品的品种(品种法),批次(分批法),步骤(分步法))
- 北邮计算机考试大纲,北邮考试大纲
- 海贼王热血航线正在连接服务器,海贼王热血航线为什么连接不了服务器?老是说人已满进不去?...
- ArcGIS学习总结(三)——空间分析基本操作
- VMware Workstation(vm虚拟机)
- Linux里面 update 和 upgrade 的区别
- java ffmpeg 合并视频_ffmpeg 合并拼接 mp4视频