在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. 错误:android.view.InflateException: Binary XML file line #167: Binary XML file line #167: Error inflating class <unknown>

    1:错误日志 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.8.activity.RecordActiv ...

  2. vs2017 创建项目推送到Git上

    地址 在从本地往云上推送的时候遇到了这样的问题 将分支推送到远程存储库时遇到错误: rejected Updates were rejected because the remote contains ...

  3. Deutsch lernen (02)

    1. fließend a. 流利的 Meine französische Freundin spricht fließend Deutsch.     流动的 Der Verkehr wickelt ...

  4. 红黑联盟 php相关资讯

    http://www.2cto.com/tag/phpbanben.html

  5. IT狂人职场路:揭秘华为百度高管如何炼成?

    原文链接:http://www.hdeso.com/waibao/detail.asp?id=45660 原文链接:http://tech.hexun.com/2014-02-18/162264716 ...

  6. (转)C#开发微信门户及应用(3)--文本消息和图文消息的应答

    http://www.cnblogs.com/wuhuacong/p/3622636.html 微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习 ...

  7. servlet 中文编码设置

    Tomcat服务器默认采用的ISO8859-1编码 产生的原因: 不同数据来源的编(解)码格式不同: 数据来源 默认编码格式 浏览器页面 GBK(可在浏览器页面右键切换) request(get) I ...

  8. [Ynoi2015]我回来了

    题目大意: 给定一张无向无权图,每次给定若干个二元组\((x_i,y_i)\),定义点\(u\)满足条件,当且仅当存在\(i\),并满足\(dist(u,x_i)\leqslant y_i\)(\(d ...

  9. mybatis使用-高级用法(二)

    新建学生表和学生证表 --学生表 CREATE TABLE student( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'id', `nam ...

  10. HDU - 1310 - Digital Roots

    先上题目: Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...