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

Max*_*ios 1 c# wpf xaml

我一直在寻找一个更好的答案,即使解决了(不是很优雅),我也想知道是否还有其他方法。我继承了一个项目,我不能对其进行过多修改,我的意思是,我只能添加一些其他属性或重写方法,而不能更改基类或接口。

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

MyIcon.Source="{x:Static images:Common.Size_22.icon}"
Run Code Online (Sandbox Code Playgroud)

我需要在此列中使用此图标,并且尝试通过包进行各种声明,但该声明不起作用。最后,我决定嵌入此位图,并通过一个属性发送它:

<mygrid:MyGridControl Model="{Binding}" Refresh="{Binding Refresh}" 
CommentsImageSource="{x:Static images:Common.Size_22.icon}" />
Run Code Online (Sandbox Code Playgroud)

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

image.Source = ToBitmapSource((System.Drawing.Bitmap)CommentsImageSource);
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是我对这个决议感到非常失望,有没有更好的方法呢?我无法引用源文件以避免通过属性发送位图。

小智 5

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

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

这将创建一个BitmapSource,然后可以将其分配为控件的ImageSource。