在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;
else
return (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="">
<Image Height="" Source="{Binding BoToIma, Converter={StaticResource boolImgConv}}" />
<Button Content="True" Height="" Click="ButtonTrue"/>
<Button Content="False" Height="" 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 == "")
{
return NormalValue;
}
else if (key == "")
{
return CrestronErrorValue;
}
else if (key == "")
{
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 "";
}
else if (value.Equals(CrestronErrorValue))
{
return "";
}
else if (value.Equals(EncErrorValue))
{
return "";
}
else
{
return "";
}
}
}

先定义四种状态,然后做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附上

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

WPF中StringToImage和BoolToImage简单用法的更多相关文章

  1. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  2. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  3. AngularJS中$http服务的简单用法

    我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...

  4. ES6中Class与export简单用法

    一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...

  5. SQL Server中row_number函数的简单用法

    一.SQL Server Row_number函数简介   ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...

  6. sqlplus 中spool命令的简单用法

    spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off ...

  7. angularjs中ng-route和ui-router简单用法的代码比较

    1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...

  8. Vue中jsx的最简单用法

    最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"& ...

  9. JS中回调函数的简单用法

    a能拿b,b能拿到c,c能拿到d,实现a拿到d的东西. function a() { b(function (data) { console.log(data); }); } function b(c ...

随机推荐

  1. ionic + cordova开发APP遇到的一些坑

    ionic1时期接触了这套体系,做了一个APP之后就放置了,最近又要开发一个APP,但时间不足以让我重头了解typescripts,于是又把之前做过的东西翻了出来,一边做一边掉坑里,爬上来再掉坑里,所 ...

  2. java就业前景发展方向分析

    随着信息化的发展,IT培训受倒了越来越多人的追捧.在开发领域,JAVA培训成为了许多人的首选!java拥有强大的开发者的数量已超过了之前的900万,将近97%的企业电脑也在运行着java,其下载量每年 ...

  3. 三维重建:SLAM的粒度和工程化问题

    百度百科的定义.此文引用了其他博客的一些图像,如有侵权,邮件联系删除. 申明一下,SLAM不是一个算法,而是一个工程. 在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由 ...

  4. THREE.js代码备份——canvas_ascii_effect(以AscII码显示图形)

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js - ASCII Ef ...

  5. Combobox 下拉框赋值

    string sql = "select distinct RoleName from tb_Role"; DataTable dt = SqlHelper.DataTable(s ...

  6. Google HTML/CSS Style Guide

    转自: http://google.github.io/styleguide/htmlcssguide.xml Google HTML/CSS Style Guide Revision 2.23 Ea ...

  7. Zookeeper-单机/集群安装

    简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少量信息.Hadoo ...

  8. UVALive Archive - 6196 - Party Games

    题目: You've been invited to a party. The host wants to divide the guests into 2 teams for party games ...

  9. 【ACM】poj_1000_A+B_201307271012

    A+B ProblemTime Limit: 1000MS  Memory Limit: 10000K Total Submissions: 296408  Accepted: 162241 Desc ...

  10. java中类的路径为什么这么长