当前位置: 首页 > news >正文

wpf之数据类型转换

前言

wpf中经常有这种需求,比如内存中存在一个Bool类型的变量,界面有个控件的背景色由内存中bool变量来控制,当变量为true时,界面为绿色;当变量为false时,界面为空色,这时直接使用数据绑定是不可行的,比如将界面控件的background属性和内存中的bool变量直接绑定这是不行的,所以需要数据转换作为桥梁。

1、数据转换实现

主要是通过实现IValueConverter接口来实现,该接口中存在Convert和ConvertBack两个方法

 public class BoolToColorConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool){SolidColorBrush bgBrush = ((bool)value) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("GREEN")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));return bgBrush;}else{return new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is SolidColorBrush){SolidColorBrush brush = value as SolidColorBrush;if(brush.Color ==Colors.Green   ){return true;}else{return false;}}else{return null;}}}

然后通过下面的代码将这个类转变为可通过key引用的资源。

<Window.Resources><local:BoolToColorConverter x:Key="BoolToColor"/></Window.Resources>

最后看下面的代码中Button的Background属性和CheckBox 的IsChecked属性绑定,Converter={StaticResource BoolToColor}指定使用什么转换。

<Window x:Class="wpf之转换器.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:wpf之转换器"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Window.Resources><local:BoolToColorConverter x:Key="BoolToColor"/></Window.Resources><Grid><StackPanel Orientation="Vertical"  ><CheckBox  Height="50" x:Name="check_test" /><Button Height=" 100" Background="{Binding IsChecked,ElementName=check_test ,Converter={StaticResource BoolToColor}}" /></StackPanel ></Grid>
</Window>

1)当你选中CheckBox时,Button背景色变为绿色
在这里插入图片描述

2)当你取消选中CheckBox时,Button背景色变为红色
在这里插入图片描述
选中或者取消选中实际上调用的是Convert方法,将bool类型转为为颜色。

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》

http://www.dtcms.com/a/519368.html

相关文章:

  • SpringBoot-Web开发之拦截器
  • 计算机网络:网络基础
  • C++学习——类与对象详细知识点总结
  • C primer plus (第六版)第十一章 编程练习第14题
  • 逆变器之逆变原理
  • PLL说明,quartus和vivado两款软件的pll IP核使用说明
  • Redis全解析:性能、类型与淘汰策略
  • 行业的年龄焦虑本质是“价值重构危机“
  • 自己建的网站无法打开晋城网站制作公司
  • InstructBLIP:迈向通用视觉-语言模型的新里程碑
  • list的底层实现
  • MySQL一键升级脚本(5.7-8.0)
  • 销售网站建设工资多少绿色主色调网站
  • 应用层网络协议深度解析:设计、实战与安全
  • C++:类和对象_bite
  • SQL之键与约束
  • 【vTESTstudio开发教程】--- 如何添加测试用例List
  • SpringBoot-Web开发之内容协商
  • 实现一个JSON工具类自动处理JSON转String
  • 域名注册网站那个好企业服务官网
  • SpringBoot-数据访问之MyBatis与Redis
  • iOS 26 App 运行状况全面解析 多工具协同监控与调试实战指南
  • uts ios插件开发tips
  • 单页营销型网站全国城建中心官方网站
  • 了解sip和rtp是什么
  • MySQL-3-函数应用及多表查询
  • 自然语言处理分享系列-词语和短语的分布式表示及其组合性(二)
  • 网站建设珠海 新盈科技泉州建站模板
  • ISO 8601日期时间标准及其在JavaScript、SQLite与MySQL中的应用解析
  • 利用博客做网站排名南京外贸网站建设案例