【问题标题】:Setting WPF image programmatically from a resource从资源以编程方式设置 WPF 图像
【发布时间】:2015-06-04 04:15:01
【问题描述】:

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

此项目包含一个继承 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}" />

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

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

它有效,但我对这个解决方案非常失望,有没有更好的方法来做到这一点?我无法引用源文件以避免按属性发送位图。

【问题讨论】:

  • 如果您能接受我的回答是正确的,那就太好了。谢谢!

标签: c# wpf xaml


【解决方案1】:

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

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

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

【讨论】:

  • 很好的答案,我仍在寻找有关减少解决方案的更多信息(不仅仅是这部分)。谢谢你的回答。
  • 此解决方案将整个位图复制到 RAM 中,并且不处理任何类型的缓存。这意味着每次加载资源时都会分配它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多