2013-07-12 49 views
1

我一直在寻找更好的答案来解决我的问题,甚至当我解决它(不是很优雅),我想知道是否有任何其他方式。 我已经继承了一个我不能修改太多的项目,我的意思是,我只能添加一些其他属性或重写方法,但不能更改基类或接口。从资源编程设置WPF图像

该项目包含一个继承WPF网格的类,以修改该行为的某些方面。我必须添加一个新的列(通过代码)与图像。每一个图像已经被存储到一个资源组合,并宣布通过静态属性,例如,我需要一个图标声明如下:

MyIcon.Source="{x:Static images:Common.Size_22.icon}" 

我需要使用这个图标我的专栏,我尝试了每一种通过一个包的声明,它不起作用。最后,我决定以嵌入此位图通过属性发送它:

<mygrid:MyGridControl Model="{Binding}" Refresh="{Binding Refresh}" 
CommentsImageSource="{x:Static images:Common.Size_22.icon}" /> 

当我创建映像细胞我也必须创建使用位图和BitmapImage的

image.Source = ToBitmapSource((System.Drawing.Bitmap)CommentsImageSource); 
之间的变换的图像对象,并设置源

它的工作原理,但我对这个决议非常失望,有没有更好的方法来做到这一点?我无法引用源文件以避免通过属性发送Bitmap。

+0

如果您接受我的答案为正确答案,那将会很好。谢谢! –

+0

完成,再次感谢! –

回答

4

当你有分配的ImageSource的代码的机会,我用BitmapToBitmapSource(Resources.image_name)

public static BitmapSource BitmapToBitmapSource(Bitmap bitmap) 
{ 
    return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 
} 

这将创建你可以再指定为您控制的ImageSource的一个的BitmapSource。

+0

很好的答案,我仍然在寻找更多关于减少解决方案的信息(不仅仅是这个部分)。感谢您的回答。 –

+0

+1!真的很好的答案。谢谢! – Sonhja

+0

该解决方案将整个位图复制到RAM并且不处理任何类型的缓存。这意味着每次加载资源时都会分配它。 – MrAsterisco