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

Tel*_*ian 1 wpf dll xaml image winforms

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

我想在WPF应用程序中通过xaml使用图像,但我能想到的唯一方法是通过手动后面的代码来完成.

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

Tim*_*res 5

您可以使用转换器直接绑定到您的图像.这是一个窗口中的示例:

<Window.Resources>
   <WinForms2WPFImageConverter x:Key="WF2WPFDrawingConverter" />
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

...

这个SO问题有一个绘图转换器,我在这里作为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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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