码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-08-28 13:07:56      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:obj   parameter   back   ase   tty   static   val   lin   tps   

原文:【值转换器】 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对象

标签:obj   parameter   back   ase   tty   static   val   lin   tps   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9547376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!