以编程方式从资源设置WPF图像

时间:2013-07-12 18:45:03

标签: c# wpf xaml

我一直在寻找一个更好的答案来解决我的问题,即使我解决了它(不是很优雅),我想知道是否还有其他办法。 我继承了一个我无法修改的项目,我的意思是,我只能添加一些其他属性或覆盖方法,但不能更改基类或接口。

此项目包含一个继承WPF网格的类,用于修改行为的某些方面。我必须添加一个带有图像的新列(按代码)。每个图像都已存储到资源程序集中并通过静态属性声明,例如,我需要的图标声明如下:

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

我需要在我的专栏中使用此图标,我尝试通过包中的各种声明,但它不起作用。最后我决定嵌入这个Bitmap通过属性发送它:

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

当我创建图像单元格时,我还必须使用Bitmap和BitmapImage之间的转换创建图像对象并设置源

image.Source = ToBitmapSource((System.Drawing.Bitmap)CommentsImageSource);

它有效,但我对此决议感到非常失望,有没有更好的方法呢?我无法引用源文件以避免按属性发送Bitmap。

1 个答案:

答案 0 :(得分:5)

如果您有机会在代码中分配ImageSource,我会使用BitmapToBitmapSource(Resources.image_name)

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

这将创建一个BitmapSource,然后您可以将其指定为控件的ImageSource。