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

简介: 原文:【值转换器】 WPF中Image数据绑定Icon对象        这是原来的代码:                这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。
原文: 【值转换器】 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,问题解决了。

目录
相关文章
|
11月前
|
C#
WPF技术之Image控件
Image控件可以用于加载和显示各种图像格式,包括位图(Bitmap)、矢量图(Vector)、矢量文档(XPS)等。它可以加载本地文件系统中的图像,或者从网络上下载图像。
296 0
WPF界面异常:未将对象引用设置到对象实例
WPF界面异常:未将对象引用设置到对象实例
|
C#
WPF Image Source 设置相对路径图片
原文:WPF Image Source 设置相对路径图片   BitmapImage bt = new BitmapImage(new Uri("Images\\3_u10484.png", UriKind.Relative));this.Img1.Source = bt;
3938 0
|
Java C#
C# WPF Image Source 频繁切换导致垃圾回收不及时导致内存占用不断增加的问题
C# WPF Image Source 频繁切换导致垃圾回收不及时导致内存占用不断增加的问题
2365 0
|
C# 前端开发 Windows
在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象
原文:在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象 这是我辅导的一个项目开发中的例子,他们是用WPF做界面开发,在学习了如何使用MVVM来实现界面与逻辑的分离,并且很好的数据更新之后,有一个疑问就是,这种双向的数据更新确实很不错,但如果我们希望用户可以撤销修改怎么办呢?其实这个功能,很早就有,甚至在原先的Windows Forms里面也可以实现。
937 0
|
C# 容器
WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)
原文:WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历) 问题:        有一些CheckBox需要作为选项添加到页面上,但是数目不定。
2411 0
|
C#
WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件。
1872 0
|
C#
wpf Content数据绑定StringFormat起作用的原理和解决
原文:wpf Content数据绑定StringFormat起作用的原理和解决 03/29/2016 15:05:30 TextBox按照预期的,显示了完整的英文星期,但是Label的格式没有任何改变。
1522 0
|
C# 数据可视化 容器
WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象
原文:WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象 简介   本文将完整叙述我利用VisualTreeHelper实现题述功能的全部过程,想直接看函数实现的朋友可以跳到函数实现部分。
1552 0
|
C#
【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
原文:【C#/WPF】Image图片的Transform变换:平移、缩放、旋转 WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移、缩放、旋转,是修改它所在的Image控件的Transform变换属性。
4858 0