原文:【值转换器】 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. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

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

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

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

  4. WPF入门教程系列十六——WPF中的数据绑定(二)

    三.绑定模式 通过上一文章中的示例,学习了简单的绑定方式.在这里的示例,要学习一下绑定的模式,和模式的使用效果. 首先,我们来做一个简单示例,这个示例是根据ListBox中的选中项,去改变TextBl ...

  5. WPF中的数据绑定Data Binding使用小结

    完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...

  6. 从资源文件中提取Icon对象到Image对象的小技巧。

    直接从资源文件中提取的Icon对象,常常要转换成image对象才能使用,如过用直接用Icon.ToBitmap()方法,就会发生丢色现象. 通过下面的方法就不会了. private  Image ge ...

  7. wpf中xaml的类型转换器与标记扩展

    wpf中xaml的类型转换器与标记扩展 原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是 ...

  8. 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter...

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

  9. js 取得input绑定的datalist中的值_javascript基础修炼(9)——MVVM中双向数据绑定的基本原理...

    [小宅按] 开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 概述 1.1 MVVM模型 MVVM模型是前端单页面应用中非常重要的模型之一,也是Single Pag ...

最新文章

  1. 关于变量作用域的一点整理
  2. 近世代数--环同态--环的扩张定理
  3. 漫画| 一图带你看懂云原生
  4. mysql 基础sql
  5. android:fillviewport=true 不起作用,无法在android模拟器中滚动
  6. android自定义view流程,Android 自定义View--从源码理解View的绘制流程
  7. python的随机种子实例
  8. 现代语音信号处理之语音信号的非线性分析
  9. 人工智能艺术:一场用算法固定创意的马拉松
  10. 收款收据设计html,统一收款收据打印软件怎么制作收据 制作打印的方法
  11. Ragel-基于有限状态机用于产生源码的编译器
  12. 4月9本最新程序员专业书:Go语言、深度学习、量子计算等与您相约
  13. 面试圣经——京东之行
  14. 使用IDEA 远程调试功能,服务器代码远程调试
  15. JS统计字符串中汉字的个数
  16. 如何查看自己名下有几张手机卡?
  17. sgu-206 Roads
  18. Druid连接池的使用讲解
  19. 漫画翻译、嵌字 AI,东京大学论文被 AAAI’21 收录
  20. CentOS 7 使用IUS第三方源安装git2

热门文章

  1. IT咨询业发展三道坎
  2. 搞定调度算法只需三分钟
  3. IIS服务器开启https
  4. 云服务器需要防火墙吗?防火墙如何启用设置?
  5. python 遥感图像分类
  6. Windows Server安全日志与系统事件变更审计
  7. html —— table 标签 与 display:table 样式
  8. 微信公众平台的基础对接
  9. 监控平台设计之GraphitePrometheus存储
  10. STM32中DMA、TCM(ITCM和DTCM)、CaChe的区别