在WPF应用程序中显示WinForm图像

时间:2010-06-04 15:37:24

标签: wpf winforms image xaml dll

我有一个带有很多System.Drawing.Image资源的dll,我已将其包装到静态属性中,因此我可以动态更新它们。

我想在WPF应用程序中通过xaml使用图像,但我能想到的唯一方法是手动执行代码。

有没有办法在xaml中的静态属性上进行winform到wpf图像转换?

2 个答案:

答案 0 :(得分:5)

您可以使用转换器直接绑定到您的图像。以下是窗口中的示例:

<Window.Resources>
   <WinForms2WPFImageConverter x:Key="WF2WPFDrawingConverter" />
</Window.Resources>

...

This SO question有一个绘图转换器,我在这里作为ValueConverter使用。

public class WinForms2WPFImageConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        System.Drawing.Image i = (System.Drawing.Image) value;   
        using (MemoryStream drawingStream = new MemoryStream())
        {

            i.Save(drawingStream);

            i.Seek(0, SeekOrigin.Begin);

            return System.Windows.Media.Imaging.BitmapFrame.Create(drawingStream);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
            throw new InvalidOperationException();
    }
}

当然,您需要在资源声明中考虑名称空间。

我建议不要使用静态属性,以便利用INotifyPropertyChanged(或依赖项属性),以便当属性指向其他图像时,显示会自动更改。

(注意:这是键入的,不是从VS复制的,所以某处可能存在语法错误。)

答案 1 :(得分:1)

您可以使用WPF中的方法绑定到您的图像。以下是链接中的示例

http://microsoftdotnetsolutions.blogspot.com/2016/07/convert-winforms-image-to-wpf.html