【值转换器】 WPF中Image数据绑定Icon对象
来源:互联网 发布:域名注册哪里便宜 编辑:程序博客网 时间:2024/05/21 06:02
<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,问题解决了。
本文链接地址为:http://blog.csdn.net/wushang923/article/details/6614733
- 【值转换器】 WPF中Image数据绑定Icon对象
- 【值转换器】 WPF中Image数据绑定Icon对象
- WPF 使用值转换器进行绑定数据的转换IValueConverter
- WPF中listview数据绑定
- Image 对象 转成 Icon
- SpringMVC 中 数据绑定 数据转换 自定义数据转换器
- WPF中Treeview绑定数据库数据
- WPF中INotifyPropertyChanged用法与数据绑定
- 绑定数据到wpf中的datagrid中
- WPF中INotifyPropertyChanged用法与数据绑定
- WPF中INotifyPropertyChanged用法与数据绑定
- WPF中INotifyPropertyChanged用法与数据绑定
- wpf值转换器用法
- WPF值转换器
- WPF 值转换器
- WPF之数据绑定
- WPF之数据绑定
- WPF之绑定数据
- 修改UISearchBar背景
- Java中的事务处理
- final和static
- matlab工作路径设置
- 事务的概念
- 【值转换器】 WPF中Image数据绑定Icon对象
- java序列化(Serializable)
- c# ref
- ubuntu 11.04 源
- hashset hashmap hashtable arraylist vector 区别
- 将windows下到web项目发布到linux中注意事项
- 代码注释规范(2)
- Eclipse快捷键大全
- 人人网发力移动电商 试水SNS+LBS新盈利模式