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="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附上

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

时间: 2024-10-14 20:16:40

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

IOS 中block结构的简单用法

自从block出现之后,很多API都开始采用这样的结构,由此可见,block确实有许多优势存在,这里将一些简单用法总结如下: 一.如何声明一个block变量 我们通过^符号来声明block类型,形式如下: void (^myBlock)(); 其中第一个void是返回值,可以是任意类型,中间括号中^后面的是这个block变量的名字,我把它命名为myBlock,最后一个括号中是参数,如果多参数,可以写成如下样式: int (^myBlock)(int,int); 同样,你也可以给参数起名字: in

关于linux中sed命令的简单用法

linux中sed的学习和使用 今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的.sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器.即如下图: 我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容.但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了. 下面就一一介绍这个有趣的命令,莫急莫急一个一个来. 首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文

AngularJS中$http服务的简单用法

我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的 配置内容.这个函数返回一个promise对象,具有success和error两个方法. $http({ url:'data.json', method:'GET' }).success(function(data,header,config,status){ //响

WPF中的MVVM模式简单实现

前言:在之前实现WPF程序时,我们可能会把所有的后台逻辑都放在视图的后台文件中,这样的实现方式的好处更直观,方便,对于一些小的应用程序这样做当然没什么问题,但是对于复杂的应用程序这样写的话,可能会导致后台代码显得非常臃肿,到最好变得难以维护.此时想到的解决方案就是职责分离,使后台的逻辑分离到其他类中,MVVM其实我理解就是达到这个目的.下面我们按照MVVM的组成部分来实现下这个MVVM程序. public class Person { public string Name { get; set;

sqlplus 中spool命令的简单用法

spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off spool常用的设置: set colsep' '; //域输出分隔符 set echo off; //显示start启动的脚本中的每个sql命令,缺省为on set feedback off; //回显本次sql命令处理的记录条数,缺省为on set heading off; //输出域标题,缺

Vue中jsx的最简单用法

最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"> hello <p>world</p> </div> 主页面 parent.vue <template> <div class="hello"> <vue-test :typeSpan="typeSpan&q

C++中的const的简单用法

一.符号常量的声明 常量声明的语句的形式: const +  数据类型说明符 + 常量名 =  常量值     数据类型说明符  + const + 常量名 =  常量值       注意: 符号常量在声明时一定要赋初值,且在程序中不能改变其值. const float PI = 3.14159; //下面则是错误的声明 const float PI; PI = 3.14159; 二.const* 和 *const 的区分 目前了解的形式 例如: const int *p (int const

JS中回调函数的简单用法

a能拿b,b能拿到c,c能拿到d,实现a拿到d的东西. function a() { b(function (data) { console.log(data); }); } function b(cb) { c(function (data) { cb(data); }); } function c(cb) { d(function (data) { cb(data); }); } function d(cb) { setTimeout(() => { let data = "彩虹&qu

Linux中awk命令的简单用法

一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.