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

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了值转换器 WPF中Image数据绑定Icon对象相关的知识,希望对你有一定的参考价值。

原文:【值转换器】 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对象的主要内容,如果未能解决你的问题,请参考以下文章

wpf中怎么获取image上的图并转化为bitmap

WPF Image控件如何根据数据状态绑定不同的图片

使用多重绑定设置c#wpf组合框背景颜色[关闭]

急等,在wpf中怎么才能把image控件的source属性绑定到listview中的选中项

wpf 数据绑定 IsVisible 到 TabControl.SelectedItem != null

WPF:概念绑定