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附上
六.写的都是自己遇到的问题和见解,有错欢迎纠正,轻喷轻拍,非常感谢
最新文章
- 通过openswan基于Azure平台搭建VPN server
- Python Day03
- linux学习笔记--NFS
- djangoadmin导出csv
- Apache日志不记录图片文件设置方法和来源日志的配置
- js函数延迟执行
- Java - 双冒泡法排序
- SDL相关资料
- 2018-2019-2 20165234 《网络对抗技术》 Exp2 后门原理与实践
- Win10安装Ubuntu子系统教程(附安装图形化界面)
- python笔记10-切片(从list或字符串中取几个元素)
- 03 事务,连接池DBCP,C3P0,DBUtils
- asp.net上传文件夹
- WCF数据交互时长度超过8192
- chrom 自带截屏用法
- ftp服务器问题
- 【刷题】BZOJ 1934 [Shoi2007]Vote 善意的投票
- MongoDB(3.6.3)的用户认证初识
- BZOJ 2333: [SCOI2011]棘手的操作 可并堆 左偏树 set
- window 更新 nodejs