绑定Image.Source到System.Drawing.Image不显示

时间:2015-01-06 19:49:02

标签: c# wpf image

我正在生成一个System.Drawing.Image对象,我将其设置为绑定的ViewModel属性。 我知道图像生成正确,但它没有在WPF表单中显示。 System.Drawing.Image不是兼容的源类型吗?

Image image = GetMyGeneratedImage();

var vm = _myViewModelFactory.CreateExport().Value;
vm.MyImage= image;

if (vm.ShowDialog(ShellView))
..

ViewModel代码:

private System.Drawing.Image _myImage;

public Image MyImage
{
   get { return _myImage; }
   set { _myImage= value; }
}

XAML:

 <Image Source="{Binding MyImage}"/>

1 个答案:

答案 0 :(得分:1)

WPF Image控件的来源不支持System.Drawing.Image。您必须将其转换为BitmapSource,并且没有可用于此转化的内置方法。

但解决方案可用:

   [DllImport("gdi32")]
   static extern int DeleteObject(IntPtr o);

   public static BitmapSource ToBitmapSource(System.Drawing.Bitmap source)
   {
       IntPtr ip = source.GetHbitmap();
       BitmapSource bs = null;
       try
       {
           bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip, 
              IntPtr.Zero, Int32Rect.Empty, 
              System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
       }
       finally
       {
           DeleteObject(ip);
       }

       return bs;
   }

参考:http://khason.net/blog/how-to-use-systemdrawingbitmap-hbitmap-in-wpf/