【值转换器】 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,问题解决了。

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

时间: 2025-01-08 01:50:06

【值转换器】 WPF中Image数据绑定Icon对象的相关文章

WPF入门教程系列十五——WPF中的数据绑定(一)

使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似,但也有所不同,在 WPF中以通过后台代码绑定.前台XAML中进行绑定,或者两者组合的方式进行数据绑定.您可以绑定控件.公共属性.XML 或对象,WPF中的数据绑定跟WinForm与ASP.NET相比,更加快捷.灵活和简单. 一.什么是数据绑定 WPF 中的数据绑定,必须要有绑定目标和

WPF中的数据绑定!!!

引用自:https://msdn.microsoft.com/zh-cn/magazine/cc163299.aspx 数据点: WPF 中的数据绑定 数据点 WPF 中的数据绑定 John Papa 代码下载位置: DataPoints2007_12.exe (161 KB) Browse the Code Online   目录 数据绑定细节 创建简单的绑定 绑定模式 绑定的时间 绑定到 XML 对象绑定和 DataTemplates 对数据进行排序 欢迎试用和反馈 到目前为止,很多人都知道

Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) --------------------------------------------------------------------------------引用或转载时请保留以下信息:大可山?[MSN:a3news(AT)hotmail.com] http://www.zpxp.com?http://www.brawdraw.com萝卜鼠在线图形图像处理

WPF 精修篇 数据绑定到对象

原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name { get { return name; } set { name = value; } } private string address; public string Address { get { return address; } set { address = value; } } pri

WPF入门教程系列十八——WPF中的数据绑定(四)

六.排序 如果想以特定的方式对数据进行排序,可以绑定到 CollectionViewSource,而不是直接绑定到 ObjectDataProvider.CollectionViewSource 则会成为数据源,并充当截取 ObjectDataProvider 中的数据的媒介,并提供排序.分组和筛选功能,然后将它传送到目标. 这个显示是使用 CollectionViewSource做为排序的数据源,首先将CollectionViewSource的Source 属性设置为 ObjectDataPr

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

完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http://msdn.microsoft.com/en-us/library/aa480224.aspx Data Binding: Part 2 http://msdn.microsoft.com/en-us/library/aa480226.aspx Data Binding Overview http:/

WPF入门教程系列十七——WPF中的数据绑定(三)

四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中,也可以是外部位置引用的文件中. 当然嵌入式 XML 内容必须置于 XmlDataProvider 内部的 <x:XData> 标记中,而且不容易修改,所以建议使用XML数据文件形式.对于 XmlDataProvider 必须命名一个 x:Key 值,以便数据绑定目标可对其进行引用. XmlDat

WPF中的三维空间(1)

原文:WPF中的三维空间(1) WPF中可以创建三维几何图形,支持3D对象的应用,支持从3D Max等软件将3D文件obj导入设计中,但是目前还不支持将材质同时导入,这样需要在WPF中对3D对象重新设置颜色或贴图. 2.10.1 WPF中的三维空间 1.三维空间坐标 WPF中二维图形的坐标系原点定位在呈现区域(屏幕)的左上角,其X 轴上的正方向朝右,Y轴的正向朝下. 在WPF的三维坐标系中,原点一般位于在WPF中创建的三维对象的中心(导入的三维对象的情况就不一定了,比如从3DMax中导入的obj

WPF值转换器

一.摘要 本文通过实例演示WPF值转换器的应用,并在演示过程中,对WPF值转换器的相关知识点进行解释说明. 二.实例演示 1 新建WPF应用程序ConverterExp,程序结构如下图所示. 图1 程序结构图 程序的主画面如下图所示. 图2 程序主画面 程序完成功能: 通过改变画面中ComboBox控件的选中项来改变TextBlock控件的Background值. ComboBox控件的下拉列表中可供选择的项有"red""green"和"blue"