zoukankan      html  css  js  c++  java
  • 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附上

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

  • 相关阅读:
    你不知道的javaScript笔记(7)
    你不知道的javaScript笔记(6)
    你不知道的javaScript笔记(5)
    你不知道的javaScript笔记(4)
    你不知道的javaScript笔记(3)
    你不知道的javaScript笔记(2)
    java 单链表反转
    Java找出两个链表的第一个公共节点
    Java产生死锁的一个简单例子
    Java 中Enum的使用与分析
  • 原文地址:https://www.cnblogs.com/Khan-Sadas/p/4950573.html
Copyright © 2011-2022 走看看