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;
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简单用法的更多相关文章
- java项目中ehcache缓存最简单用法
java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...
- WPF之Treeview控件简单用法
TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...
- AngularJS中$http服务的简单用法
我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...
- ES6中Class与export简单用法
一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...
- SQL Server中row_number函数的简单用法
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
- sqlplus 中spool命令的简单用法
spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off ...
- angularjs中ng-route和ui-router简单用法的代码比较
1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...
- Vue中jsx的最简单用法
最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"& ...
- JS中回调函数的简单用法
a能拿b,b能拿到c,c能拿到d,实现a拿到d的东西. function a() { b(function (data) { console.log(data); }); } function b(c ...
随机推荐
- 努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT 工具下载链接:https://pan.baidu.com/s/1NfRTdXtdAZRi ...
- Table边框使用总结 ,只显示你要显示的边框
表格的常用属性 基本属性有:width(宽度).height(高度).border(边框值).cellspacing(表格的内宽,即表格与tr之间的间隔). cellpadding(表格内元素的间隔, ...
- 浅谈Overload和Override的区别
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Over ...
- BZOJ 3450: Tyvj1952 Easy 数学期望
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- phpqrcode生成二维码
这篇文章讲解得非常详细: https://www.jb51.net/article/136418.htm 备注一下: 如果遇到生成的二维码是一串乱码.只需要在代码最后加上 exit();即可解决,原理 ...
- Golang - 处理字符串
目录 Golang - 处理字符串 1. 字符串操作 2. 字符串转换 Golang - 处理字符串 1. 字符串操作 func Contains(s, substr string) bool 字符串 ...
- firebird的递归查询
with RECURSIVE cte as ( select a.* from PM_PROJECT a where a.pm_id='root_id' union all select k.* fr ...
- ro多层的事务处理失败的困惑
现象: 用 :: ::'' 在客户端用上面的语句取得数据,然后修改数据,通过RO的web service提交数据失败: 用 -- ::-- ::'‘ 在客户端用上面的语句取得数据,然后修改数据,通过R ...
- 【 Codeforces Round #519 by Botan Investments B】Lost Array
[链接] 我是链接,点我呀:) [题意] [题解] 枚举k 不难根据a得到x[0..k-1] 然后再根据a[k+1..n]来验证一下得到的x是否正确就好. [代码] #include <bits ...
- mongodb drop不释放磁盘空间
点击(此处)折叠或打开 use demodb //使用demodb,以下假设操作的collection是foo db.foo.remove({"id":"123456&q ...