WPF中StringToImage和BoolToImage简单用法

 

  在WPF的绑定控件操作中,经常会通过bool值或者某些特定的string值做出相应动作。但UI层控件的很多属性对应的都不是Bool值或者对应的只是固定的String值。

  这个时候有两方法解决该问题。

  1.是在后台cs中做出比较判断,然后根据相应结果传达UI层做出相应动作。

  2.是直接在UI界面写好,然后会自行根据传入值做相应动作。

  本文主要讲第二种方法。Demo在结尾会附上。

  一.基类,判断类代码(Bool篇)

  

 public class BoolToValueConverter<T> : IValueConverter{public T FalseValue { get; set; }public T TrueValue { get; set; }public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){if (value == null)return FalseValue;elsereturn (bool)value ? TrueValue : FalseValue;}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){return value != null ? value.Equals(TrueValue) : false;}}

  新建个类继承自IValueConverter,并将其继承方法名写出来(Convert和ConvertBack),这两个方法是逻辑判断的主要代码。Convert是将传入值做出判断和返回相应结果,此处是TrueValue或FalseValue。ConverBack是将返回结果反转换回来,本文并没有用到这个。

 

  二.新建个实用类

 public class BoolToBitmapImageConverter : BoolToValueConverter<BitmapImage> { }

  该类继承BoolToValueConverter<T>,因为Demo转换的是图片所以类型是BitmapImage。

  

  三.UI布置

 

    <Window.Resources><view:BoolToBitmapImageConverter x:Key="boolImgConv" ><view:BoolToBitmapImageConverter.TrueValue><BitmapImage UriSource="Resource/Status-True.png" /></view:BoolToBitmapImageConverter.TrueValue><view:BoolToBitmapImageConverter.FalseValue><BitmapImage UriSource="Resource/Status-False.png" /></view:BoolToBitmapImageConverter.FalseValue></view:BoolToBitmapImageConverter></Window.Resources><StackPanel Width="260"><Image Height="40" Source="{Binding BoToIma, Converter={StaticResource boolImgConv}}" /><Button Content="True" Height="100" Click="ButtonTrue"/><Button Content="False" Height="100" Click="ButtonFalse"/></StackPanel>

  Source中BoToIma是绑定传入的数据,然后通过转换器Converter转换,转换显示结果在Key是boolImgConv中做图片绑定,在Window.Resource里设置True或False的绑定图片。

 

  四.StringToImage简单聊聊

  StringToImage和BoolToImage差不多,只是在Convert和ConvertBack中的逻辑判断做的相对细致些,比如:传入值“X”抛出值"Y",传入值“XX”抛出值"YY",传入值“XXX”抛出值"YYY"等等,做个IF判断或者Switch判断即可。

  算了,贴代码说话,语文不好是个硬伤。

 public class StringToImageSourceConverter : StringToValueConverter<ImageSource> { }public class StringToValueConverter<T> : IValueConverter{public ImageSource NormalValue { get; set; }public ImageSource CrestronErrorValue { get; set; }public ImageSource EncErrorValue { get; set; }public ImageSource AllErrorValue { get; set; }public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){string key = value == null ? null : value.ToString();if (string.IsNullOrEmpty(key) || key == "00"){return NormalValue;}else if (key == "01"){return CrestronErrorValue;}else if (key == "10"){return EncErrorValue;}else{return AllErrorValue;}}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){if (value == null || value.Equals(NormalValue)){return "00";}else if (value.Equals(CrestronErrorValue)){return "01";}else if (value.Equals(EncErrorValue)){return "10";}else{return "11";}}}

 先定义四种状态,然后做if判断。新建类继承该类,完活,太细致的我也不懂。。。。
   UI层:Windows.Resource里设置绑定属性

  <view:StringToImageSourceConverter x:Key="stringImgConv"><view:StringToImageSourceConverter.NormalValue><BitmapImage UriSource="Resource/Status1.png" /></view:StringToImageSourceConverter.NormalValue><view:StringToImageSourceConverter.CrestronErrorValue><BitmapImage UriSource="Resource/Status2.png" /></view:StringToImageSourceConverter.CrestronErrorValue><view:StringToImageSourceConverter.EncErrorValue><BitmapImage UriSource="Resource/Status3.png" /></view:StringToImageSourceConverter.EncErrorValue><view:StringToImageSourceConverter.AllErrorValue><BitmapImage UriSource="Resource/Status4.png" /></view:StringToImageSourceConverter.AllErrorValue></view:StringToImageSourceConverter>

  

五.Demo附上

 

六.写的都是自己遇到的问题和见解,有错欢迎纠正,轻喷轻拍,非常感谢

转载于:https://www.cnblogs.com/Khan-Sadas/p/4950573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【必备】jQuery性能优化的38个建议

一、注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery&#xff0c;所有javascript开发过程中&#xff0c;都需要注意&#xff0c;请一定不要定义成如下&#xff1a;$loading $(#loading); //这个是全局定义&#xff0c;不知道哪里位置倒霉引用了相同的变量名&#xf…

java中策略设计模式_Java中的设计模式(五):策略模式

策略设计模式是行为设计模式之一。当我们为特定任务使用多个算法时&#xff0c;使用策略模式&#xff0c;客户端决定在运行时使用的实际实现。策略模式的最佳示例之一是Collections.sort()采用Comparator参数的方法。基于Comparator接口的不同实现&#xff0c;对象将以不同的方…

isset函数

isset (PHP 4, PHP 5) isset — 检测变量是否设置 检测变量是否设置&#xff0c;并且不是 NULL。 如果 var 存在并且值不是 NULL 则返回 TRUE&#xff0c;否则返回 FALSE。 $a "test"; $b "anothertest";var_dump(isset($a)); // TRUE var_dump(i…

SQLl中的left join、right join、inner join详解

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行举例如下&#xff1a;--------------------------------------------表A记…

afudos备份bios不动_bios刷坏后的两种解决方法

通常主板新的BIOS可以修正旧版中BIOS的一些BUG&#xff0c;纠正对某些硬件和软件的兼容问题&#xff0c;添加新硬件的支持等等&#xff0c;所以有时我们需要刷新BIOS。但刷新主板BIOS实际上是存在一定风险的&#xff0c;虽然现在各主板厂商都推出了在Windows下刷新BIOS的软件&a…

光学基础知识:白光、颜色混合、RGB、色彩空间

1665年&#xff0c;牛顿(Isaac Newton)进行了太阳光实验&#xff0c;让太阳光通过窗板的小圆孔照射在玻璃三角棱镜上&#xff0c;光束在棱镜中折射后&#xff0c;扩散为一个连续的彩虹颜色带&#xff0c;牛顿称之为光谱&#xff0c;表示连续的可见光谱。而可见光谱只是所有电磁…

SQL Server各个版本功能比较

微软的SQlserver主要经历了从sql server 2000 到最新的sql server 2017&#xff0c;现把各个版本的更新特性介绍如下&#xff1a;SQL SERVER 2000日志传送索引视图SQL SERVER 2005数据库镜像&#xff08;只有 SQL Server 2005 Enterprise Edition SP1 和更高版本支持异步数据库…

java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》

章节目标使用JPA EntityManagerFactory使用注解提供映射信息使用 JPA 接口本教程可在 entitymanger/ 路径下下载4.1. persistence.xml之前的章节使用了hibernate原生的配置文件hibernate.cfg.xml。然而&#xff0c;JPA中定义了不同的的自助配置文件persistence.xml。这个启动过…

HTTP消息中Header头部信息整理

1、HTTP请求方式GET向Web服务器请求一个文件POST向Web服务器发送数据让Web服务器进行处理PUT向Web服务器发送数据并存储在Web服务器内部HEAD检查一个对象是否存在DELETE从Web服务器上删除一个文件CONNECT对通道提供支持TRACE跟踪到服务器的路径OPTIONS查询Web服务器的性能说明&…

gdb命令中attach使用

[测试程序] 我们先看看我们的测试程序: /* in eg1.c */ int wib(int no1, int no2) { int result, diff; diff no1 - no2; result no1 / diff; return result; } int main() { pid_t pid; pid fork(); if (pid &…

java%4d_java积累

数组的使用package javaDemo;import java.util.*;/**** author Administrator* version 1.0***/public class test {public static void main(String[] args){String[] greeting new String[3];greeting[0] "Welcome to Core Java";greeting[1] "by Cay Hors…

查询CPU占用高的SQL语句的解决方案

触发器造成死锁、作业多且频繁、中间表的大量使用、游标的大量使用、索引的设计不合理、事务操作频繁、SQL语句设计不合理&#xff0c;都会造成查询效率低下、影响服务器性能的发挥。我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源&…

父类与子类之间的关系

1) 运行课件中的例题ParentChildTest.java&#xff0c;回答下列问题&#xff1a; a) 左边的程序运行结果是什么&#xff1f; b) 你如何解释会得到这样的输出&#xff1f; 第一个创建一个Parent对象&#xff0c;调用的是父类构造方法 第二个创建一个Child对象&#xff0c;调用的…

php获取到的json数据如何处理_php – 如何从API获取JSON数据

我使用过雅虎的符号查找它以JSON格式返回数据.喜欢以下YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet": {"Query": "ya","Result": [{"symbol": "YHOO","name": "Yahoo! Inc.","…

.NET开发中应该遵循的几点建议

1、始终控制类的大小那些超大的类在尝试做太多的事情&#xff0c;这违反了单一职责原则&#xff0c; 为什么一定要将两个职责分离到单独的类中呢&#xff1f;因为每一个职责都是变化的中心。在需求变更时&#xff0c;这个变更将会出现在负责该职责的类中。如果一个类承担了多个…

Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案

Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时&#xff0c;发现启动不了&#xff0c;从日志中找到报java.lang.OutOfMemoryError: PermGen space。原因分析PermGen space&#xff0c;全…

微博php sdk,手机第三方新浪微博登录php api实现分析

提供api&#xff0c;POST方式&#xff0c;根据传递过来的微博uid/appkey&#xff0c;判断该用户的ID是否在自己的数据库中。如果有&#xff0c;直接登录返回用户登录api的json。如果没有&#xff0c;就将该用户的IDtoken请求微博用户信息api&#xff1a;http://open.weibo.com/…

13条只有程序员才能懂的内涵段子

一、bug跟蚊子的相似之处&#xff1a;1、不知道藏在哪里。2、不知道有多少。3、总是在你即将睡觉休息的时候出现。二、A&#xff1a;最近在看《一拳超人》&#xff0c;觉得咱们程序猿跟埼玉老师有点像啊&#xff01;B&#xff1a;哪里像了&#xff1f;A&#xff1a;越秃越强&am…

Posix消息队列

一、函数 mq_open 头文件 mqueue.h&#xff1b; 原型 mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struct mq_attr* attr*/); 函数功能 创建消息队列&#xff1b; 参数 name &#xff1a;消息队列的名字&#xff0c;根据消息队列的规则&#xff0c;为了更好的…

php 等值线,【地理】攻克等值线的六大法门

3.等值线数值大小的判断方法(1)通常情况下&#xff0c;据图中已标注的等值线进行分析标注&#xff0c;标注时注意&#xff1a;①等值线数值的递变规律&#xff1b;②相邻两条等值线差值的大小。(2)在闭合的等值线上&#xff0c;除据以上方法判断外&#xff0c;还可用“大于…