原文:【值转换器】 WPF中Image数据绑定Icon对象

       这是原来的代码:

       <Image Source="{Binding MenuIcon}"  />

       这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。

       我遇到的问题是,同事已经封装好的类中的MenuIcon是Icon对象,并不是一个相对或者绝对的路径,另外WPF里也没有可以直接表示Icon对象的控件,而我最终需要实现的功能是动态添加和显示这些对象。

        最初时我是想同事可以把类中值类型改变,但是他们说这样就需要重写这个类了。于是我又想是不是可以建一个临时的存储变量,把里面所有的MenuIcon对象都取出来再加以变换,这大概是可行的,不过确实也是加大了开销。那么可不可以在伴随着读取的时候就直接转换呢,当然可以,这里我们或许能在读取的函数里再加一个转换的方法,不过那样的话,每一个类里的属性都要单独的读取了,这也挺麻烦的,好在还有另一种方法,WPF的值转换器。

[ValueConversion(typeof(Icon), typeof(ImageSource))]   // Icon是源类型,ImageSource是目标类型。

public class IconConverter : IValueConverter                 //继承了 IValueConverter


{

     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

     {

             Icon icon = (Icon)value;    

             Bitmap bitmap = icon.ToBitmap();

             IntPtr hBitmap = bitmap.GetHbitmap();

             ImageSource bitmapSource =

             Imaging.CreateBitmapSourceFromHBitmap(

             hBitmap, IntPtr.Zero, Int32Rect.Empty,

             BitmapSizeOptions.FromEmptyOptions());

             return bitmapSource;

     }

    //下面的函数是为了实现上面转换的逆操作的,这里我们不需要把ImageSource再变成Icon所以没有写具体的实现

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

    {

            throw new NotImplementedException();

     }

}

最后把数据再重新绑定一下,

1、添加引用:xmlns:local="clr-namespace:转换器所在命名空间"

2、添加资源:<local:IconConverter x:Key="iconConverter"/>

3、绑定转换器数据:<Image Source="{Binding Path=MenuIcon, Converter={StaticResource iconConverter}}" />

OK,问题解决了。

【值转换器】 WPF中Image数据绑定Icon对象的更多相关文章

  1. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  2. WPF中的数据绑定

    WPF中的数据绑定 基础概念 System.Windows.Data.Binding,他会把两个对象(UI对象与UI对象之间,UI对象与.NET数据对象之间)按照指定的方式粘合在一起,并在他们之间建立 ...

  3. WPF中的数据绑定!!!

    引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx  数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Pap ...

  4. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

  5. WPF中的数据绑定(初级)

    关于WPF中的数据绑定,初步探讨 数据绑定属于WPF中比较核心的范畴,以下是对WPF中数据绑定的一个初步探讨.个人感觉还是带有问题性质的叙述比较高效,也比较容易懂 第一,什么是数据绑定? 假定有这么一 ...

  6. WPF 精修篇 数据绑定到对象

    原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...

  7. 在 WPF 中获取一个依赖对象的所有依赖项属性

    原文:在 WPF 中获取一个依赖对象的所有依赖项属性 本文介绍如何在 WPF 中获取一个依赖对象的所有依赖项属性. 本文内容 通过 WPF 标记获取 通过设计器专用方法获取 通过 WPF 标记获取 p ...

  8. 【翻译】WPF中的数据绑定表达式

    有很多文章讨论绑定的概念,并讲解如何使用StaticResources和DynamicResources绑定属性.这些概念使用WPF提供的数据绑定表达式.在本文中,让我们研究WPF提供的不同类型的数据 ...

  9. WPF入门教程系列十八——WPF中的数据绑定(四)

    六.排序 如果想以特定的方式对数据进行排序,可以绑定到 CollectionViewSource,而不是直接绑定到 ObjectDataProvider.CollectionViewSource 则会 ...

随机推荐

  1. iir调试记录

    1.目的 实现採样率fs=50MHz,通带为5MHz~15MHz.阻带衰减60dB的IIR带通滤波器 2.方案 採取直接型 3.具体设计 (1)确定滤波器的系数,系数和滤波器输出量化位宽 先依据要求的 ...

  2. 翻译 | Qt研发副总裁分享2018年工作计划

    原文作者:TuukkaTurunen,高级研发副总裁 翻译校审:Haipeng.Yulong和Ryan 引言:2018年,我们将继续完善Qt 5.9 LTS,现在我们正在为5月份发布Qt 5.11进行 ...

  3. TreeMap、HashMap、ConcurrentSkipListMap之性能比较

    比较Java原生的 3种Map的效率. 1.  TreeMap 2.  HashMap 3.  ConcurrentSkipListMap 结果: 模拟150W以内海量数据的插入和查找,通过增加和查找 ...

  4. html5的float属性超详解(display,position, float)(文本流)

    html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照 ...

  5. linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析

    一._IO, _IOR, _IOW, _IOWR 宏的用法与解析 在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包 ...

  6. [GraphQL] Create an Input Object Type for Complex Mutations

    When we have certain mutations that require more complex input parameters, we can leverage the Input ...

  7. 搭建微信小程序开发环境

    1.下载开发工具 点击进入下载地址选择和自己电脑匹配的安装包,并安装: image.png 安装完成后出现应用icon: image.png 2.创建项目 能够扫码登录的前提是微信号已经注册了小程序, ...

  8. [Postgres] Update and Delete records in Postgres

    Delete example: DELETE FROM movies ; Update example: UPDATE movies ;

  9. Expression Blend 的点滴(2)--利用可视化状态创建神奇翻转动画

    原文:Expression Blend 的点滴(2)--利用可视化状态创建神奇翻转动画 首先,来看下实现后的效果: 关于VisulaState VisualState 指定控件处于特定状态时的外观.例 ...

  10. 【matlab】安装 webcam 支持

    打开 matlab 命令行,输入 webcam,如果提示: 尚未安装 MATLAB Support Package for USB Webcams.打开支持包安装程序即可安装 Webcam Suppo ...